1 /**
2  * Copyright (c) 2016, The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.net;
18 
19 import android.net.INetdUnsolicitedEventListener;
20 import android.net.InterfaceConfigurationParcel;
21 import android.net.IpSecMigrateInfoParcel;
22 import android.net.MarkMaskParcel;
23 import android.net.NativeNetworkConfig;
24 import android.net.RouteInfoParcel;
25 import android.net.TetherConfigParcel;
26 import android.net.TetherOffloadRuleParcel;
27 import android.net.TetherStatsParcel;
28 import android.net.UidRangeParcel;
29 import android.net.netd.aidl.NativeUidRangeConfig;
30 
31 /** {@hide} */
32 interface INetd {
33     /**
34      * Returns true if the service is responding.
35      */
isAlive()36     boolean isAlive();
37 
38     /**
39      * Replaces the contents of the specified UID-based firewall chain.
40      *
41      * The chain may be an allowlist chain or a denylist chain. A denylist chain contains DROP
42      * rules for the specified UIDs and a RETURN rule at the end. An allowlist chain contains RETURN
43      * rules for the system UID range (0 to {@code UID_APP} - 1), RETURN rules for for the specified
44      * UIDs, and a DROP rule at the end. The chain will be created if it does not exist.
45      *
46      * @param chainName The name of the chain to replace.
47      * @param isAllowlist Whether this is an allowlist or denylist chain.
48      * @param uids The list of UIDs to allow/deny.
49      * @return true if the chain was successfully replaced, false otherwise.
50      * @deprecated unimplemented on T+.
51      */
firewallReplaceUidChain(in @tf8InCpp String chainName, boolean isAllowlist, in int[] uids)52     boolean firewallReplaceUidChain(in @utf8InCpp String chainName,
53                                     boolean isAllowlist,
54                                     in int[] uids);
55 
56     /**
57      * Enables or disables data saver mode on costly network interfaces.
58      *
59      * - When disabled, all packets to/from apps in the penalty box chain are rejected on costly
60      *   interfaces. Traffic to/from other apps or on other network interfaces is allowed.
61      * - When enabled, only apps that are in the happy box chain and not in the penalty box chain
62      *   are allowed network connectivity on costly interfaces. All other packets on these
63      *   interfaces are rejected. The happy box chain always contains all system UIDs; to disallow
64      *   traffic from system UIDs, place them in the penalty box chain.
65      *
66      * By default, data saver mode is disabled. This command has no effect but might still return an
67      * error) if {@code enable} is the same as the current value.
68      *
69      * @param enable whether to enable or disable data saver mode.
70      * @return true if the if the operation was successful, false otherwise.
71      */
bandwidthEnableDataSaver(boolean enable)72     boolean bandwidthEnableDataSaver(boolean enable);
73 
74     /**
75      * Creates a physical network (i.e., one containing physical interfaces.
76      * @deprecated use networkCreate() instead.
77      *
78      * @param netId the networkId to create.
79      * @param permission the permission necessary to use the network. Must be one of
80      *         PERMISSION_NONE/PERMISSION_NETWORK/PERMISSION_SYSTEM.
81      *
82      * @throws ServiceSpecificException in case of failure, with an error code corresponding to the
83      *         unix errno.
84      */
networkCreatePhysical(int netId, int permission)85     void networkCreatePhysical(int netId, int permission);
86 
87     /**
88      * Creates a VPN network.
89      * @deprecated use networkCreate() instead.
90      *
91      * @param netId the network to create.
92      * @param secure whether unprivileged apps are allowed to bypass the VPN.
93      *
94      * @throws ServiceSpecificException in case of failure, with an error code corresponding to the
95      *         unix errno.
96      */
networkCreateVpn(int netId, boolean secure)97     void networkCreateVpn(int netId, boolean secure);
98 
99     /**
100      * Destroys a network. Any interfaces added to the network are removed, and the network ceases
101      * to be the default network.
102      *
103      * @param netId the network to destroy.
104      *
105      * @throws ServiceSpecificException in case of failure, with an error code corresponding to the
106      *         unix errno.
107      */
networkDestroy(int netId)108     void networkDestroy(int netId);
109 
110     /**
111      * Adds an interface to a network. The interface must not be assigned to any network, including
112      * the specified network.
113      *
114      * @param netId the network to add the interface to.
115      * @param interface the name of the interface to add.
116      *
117      * @throws ServiceSpecificException in case of failure, with an error code corresponding to the
118      *         unix errno.
119      */
networkAddInterface(int netId, in @utf8InCpp String iface)120     void networkAddInterface(int netId, in @utf8InCpp String iface);
121 
122     /**
123      * Adds an interface to a network. The interface must be assigned to the specified network.
124      *
125      * @param netId the network to remove the interface from.
126      * @param interface the name of the interface to remove.
127      *
128      * @throws ServiceSpecificException in case of failure, with an error code corresponding to the
129      *         unix errno.
130      */
networkRemoveInterface(int netId, in @utf8InCpp String iface)131     void networkRemoveInterface(int netId, in @utf8InCpp String iface);
132 
133     /**
134      * Adds the specified UID ranges to the specified network. The network can be physical or
135      * virtual. Traffic from the UID ranges will be routed to the network by default.
136      *
137      * @param netId the network ID of the network to add the ranges to.
138      * @param uidRanges a set of non-overlapping ranges of UIDs to add. These exact ranges
139      *        must not overlap with existing ranges assigned to this network.
140      *
141      * @throws ServiceSpecificException in case of failure, with an error code corresponding to the
142      *         unix errno.
143      */
networkAddUidRanges(int netId, in UidRangeParcel[] uidRanges)144     void networkAddUidRanges(int netId, in UidRangeParcel[] uidRanges);
145 
146     /**
147      * Remove the specified UID ranges from the specified network. The network can be physical or
148      * virtual. Traffic from the UID ranges will no longer be routed to the network by default.
149      *
150      * @param netId the network ID of the network to remove the ranges from.
151      * @param uidRanges a set of non-overlapping ranges of UIDs to remove. These exact ranges
152      *        must already be assigned to this network.
153      *
154      * @throws ServiceSpecificException in case of failure, with an error code corresponding to the
155      *         unix errno.
156      */
networkRemoveUidRanges(int netId, in UidRangeParcel[] uidRanges)157     void networkRemoveUidRanges(int netId, in UidRangeParcel[] uidRanges);
158 
159     /**
160      * Adds or removes one rule for each supplied UID range to prohibit all network activity outside
161      * of secure VPN.
162      *
163      * When a UID is covered by one of these rules, traffic sent through any socket that is not
164      * protected or explicitly overriden by the system will be rejected. The kernel will respond
165      * with an ICMP prohibit message.
166      *
167      * Initially, there are no such rules. Any rules that are added will only last until the next
168      * restart of netd or the device.
169      *
170      * @param add {@code true} if the specified UID ranges should be denied access to any network
171      *        which is not secure VPN by adding rules, {@code false} to remove existing rules.
172      * @param uidRanges a set of non-overlapping, contiguous ranges of UIDs to which to apply or
173      *        remove this restriction.
174      *        <p> Added rules should not overlap with existing rules. Likewise, removed rules should
175      *        each correspond to an existing rule.
176      *
177      * @throws ServiceSpecificException in case of failure, with an error code corresponding to the
178      *         unix errno.
179      */
networkRejectNonSecureVpn(boolean add, in UidRangeParcel[] uidRanges)180     void networkRejectNonSecureVpn(boolean add, in UidRangeParcel[] uidRanges);
181 
182     /**
183      * Administratively closes sockets belonging to the specified UIDs.
184      */
socketDestroy(in UidRangeParcel[] uidRanges, in int[] exemptUids)185     void socketDestroy(in UidRangeParcel[] uidRanges, in int[] exemptUids);
186 
187     /**
188      * Instruct the tethering DNS server to reevaluated serving interfaces.
189      * This is needed to for the DNS server to observe changes in the set
190      * of potential listening IP addresses. (Listening on wildcard addresses
191      * can turn the device into an open resolver; b/7530468)
192      *
193      * TODO: Return something richer than just a boolean.
194      */
tetherApplyDnsInterfaces()195     boolean tetherApplyDnsInterfaces();
196 
197     /**
198      * Return tethering statistics.
199      *
200      * @return an array of TetherStatsParcel, where each entry contains the upstream interface
201      *         name and its tethering statistics since netd startup.
202      *         There will only ever be one entry for a given interface.
203      * @throws ServiceSpecificException in case of failure, with an error code indicating the
204      *         cause of the failure.
205      */
tetherGetStats()206     TetherStatsParcel[] tetherGetStats();
207 
208     /**
209      * Add/Remove and IP address from an interface.
210      *
211      * @param ifName the interface name
212      * @param addrString the IP address to add/remove as a string literal
213      * @param prefixLength the prefix length associated with this IP address
214      *
215      * @throws ServiceSpecificException in case of failure, with an error code corresponding to the
216      *         unix errno.
217      */
interfaceAddAddress(in @tf8InCpp String ifName, in @utf8InCpp String addrString, int prefixLength)218     void interfaceAddAddress(in @utf8InCpp String ifName, in @utf8InCpp String addrString,
219             int prefixLength);
interfaceDelAddress(in @tf8InCpp String ifName, in @utf8InCpp String addrString, int prefixLength)220     void interfaceDelAddress(in @utf8InCpp String ifName, in @utf8InCpp String addrString,
221             int prefixLength);
222 
223     /**
224      * Set and get /proc/sys/net interface configuration parameters.
225      *
226      * @param ipversion One of IPV4/IPV6 integers, indicating the desired IP version directory.
227      * @param which One of CONF/NEIGH integers, indicating the desired parameter category directory.
228      * @param ifname The interface name portion of the path; may also be "all" or "default".
229      * @param parameter The parameter name portion of the path.
230      * @param value The value string to be written into the assembled path.
231      *
232      * @throws ServiceSpecificException in case of failure, with an error code corresponding to the
233      *         unix errno.
234      */
235 
236     const int IPV4  = 4;
237     const int IPV6  = 6;
238     const int CONF  = 1;
239     const int NEIGH = 2;
getProcSysNet(int ipversion, int which, in @utf8InCpp String ifname, in @utf8InCpp String parameter)240     @utf8InCpp String getProcSysNet(int ipversion, int which, in @utf8InCpp String ifname,
241             in @utf8InCpp String parameter);
setProcSysNet(int ipversion, int which, in @utf8InCpp String ifname, in @utf8InCpp String parameter, in @utf8InCpp String value)242     void setProcSysNet(int ipversion, int which, in @utf8InCpp String ifname,
243             in @utf8InCpp String parameter, in @utf8InCpp String value);
244 
245    /**
246     * Sets owner of socket ParcelFileDescriptor to the new UID, checking to ensure that the caller's
247     * uid is that of the old owner's, and that this is a UDP-encap socket
248     *
249     * @param ParcelFileDescriptor socket Socket file descriptor
250     * @param int newUid UID of the new socket fd owner
251     */
ipSecSetEncapSocketOwner(in ParcelFileDescriptor socket, int newUid)252     void ipSecSetEncapSocketOwner(in ParcelFileDescriptor socket, int newUid);
253 
254    /**
255     * Reserve an SPI from the kernel
256     *
257     * @param transformId a unique identifier for allocated resources
258     * @param sourceAddress InetAddress as string for the sending endpoint
259     * @param destinationAddress InetAddress as string for the receiving endpoint
260     * @param spi a requested 32-bit unique ID or 0 to request random allocation
261     * @return the SPI that was allocated or 0 if failed
262     */
ipSecAllocateSpi( int transformId, in @utf8InCpp String sourceAddress, in @utf8InCpp String destinationAddress, int spi)263     int ipSecAllocateSpi(
264             int transformId,
265             in @utf8InCpp String sourceAddress,
266             in @utf8InCpp String destinationAddress,
267             int spi);
268 
269    /**
270     * Update an IPsec SA (xfrm_state) describing how ip(v6) traffic will be encrypted
271     * or decrypted.
272     *
273     * @param transformId a unique identifier for allocated resources
274     * @param mode either Transport or Tunnel mode
275     * @param sourceAddress InetAddress as string for the sending endpoint
276     * @param destinationAddress InetAddress as string for the receiving endpoint
277     * @param underlyingNetId the netId of the network to which the SA is applied. Only accepted for
278     *        tunnel mode SAs.
279     * @param spi a 32-bit unique ID allocated to the user
280     * @param markValue a 32-bit unique ID chosen by the user
281     * @param markMask a 32-bit mask chosen by the user
282     * @param authAlgo a string identifying the authentication algorithm to be used
283     * @param authKey a byte array containing the authentication key
284     * @param authTruncBits the truncation length of the MAC produced by the authentication algorithm
285     * @param cryptAlgo a string identifying the encryption algorithm to be used
286     * @param cryptKey a byte arrray containing the encryption key
287     * @param cryptTruncBits unused parameter
288     * @param aeadAlgo a string identifying the authenticated encryption algorithm to be used
289     * @param aeadKey a byte arrray containing the key to be used in authenticated encryption
290     * @param aeadIcvBits the truncation length of the ICV produced by the authentication algorithm
291     *        (similar to authTruncBits in function)
292     * @param encapType encapsulation type used (if any) for the udp encap socket
293     * @param encapLocalPort the port number on the host to be used in encap packets
294     * @param encapRemotePort the port number of the remote to be used for encap packets
295     * @param interfaceId the identifier for the IPsec tunnel interface.
296     *        Only accepted for tunnel mode SAs.
297     */
ipSecAddSecurityAssociation( int transformId, int mode, in @utf8InCpp String sourceAddress, in @utf8InCpp String destinationAddress, int underlyingNetId, int spi, int markValue, int markMask, in @utf8InCpp String authAlgo, in byte[] authKey, in int authTruncBits, in @utf8InCpp String cryptAlgo, in byte[] cryptKey, in int cryptTruncBits, in @utf8InCpp String aeadAlgo, in byte[] aeadKey, in int aeadIcvBits, int encapType, int encapLocalPort, int encapRemotePort, int interfaceId)298     void ipSecAddSecurityAssociation(
299             int transformId,
300             int mode,
301             in @utf8InCpp String sourceAddress,
302             in @utf8InCpp String destinationAddress,
303             int underlyingNetId,
304             int spi,
305             int markValue,
306             int markMask,
307             in @utf8InCpp String authAlgo, in byte[] authKey, in int authTruncBits,
308             in @utf8InCpp String cryptAlgo, in byte[] cryptKey, in int cryptTruncBits,
309             in @utf8InCpp String aeadAlgo, in byte[] aeadKey, in int aeadIcvBits,
310             int encapType,
311             int encapLocalPort,
312             int encapRemotePort,
313             int interfaceId);
314 
315    /**
316     * Delete a previously created security association identified by the provided parameters
317     *
318     * @param transformId a unique identifier for allocated resources
319     * @param sourceAddress InetAddress as string for the sending endpoint
320     * @param destinationAddress InetAddress as string for the receiving endpoint
321     * @param spi a requested 32-bit unique ID allocated to the user
322     * @param markValue a 32-bit unique ID chosen by the user
323     * @param markMask a 32-bit mask chosen by the user
324     * @param interfaceId the identifier for the IPsec tunnel interface.
325     */
ipSecDeleteSecurityAssociation( int transformId, in @utf8InCpp String sourceAddress, in @utf8InCpp String destinationAddress, int spi, int markValue, int markMask, int interfaceId)326     void ipSecDeleteSecurityAssociation(
327             int transformId,
328             in @utf8InCpp String sourceAddress,
329             in @utf8InCpp String destinationAddress,
330             int spi,
331             int markValue,
332             int markMask,
333             int interfaceId);
334 
335    /**
336     * Apply a previously created SA to a specified socket, starting IPsec on that socket
337     *
338     * @param socket a user-provided socket that will have IPsec applied
339     * @param transformId a unique identifier for allocated resources
340     * @param direction DIRECTION_IN or DIRECTION_OUT
341     * @param sourceAddress InetAddress as string for the sending endpoint
342     * @param destinationAddress InetAddress as string for the receiving endpoint
343     * @param spi a 32-bit unique ID allocated to the user (socket owner)
344     */
ipSecApplyTransportModeTransform( in ParcelFileDescriptor socket, int transformId, int direction, in @utf8InCpp String sourceAddress, in @utf8InCpp String destinationAddress, int spi)345     void ipSecApplyTransportModeTransform(
346             in ParcelFileDescriptor socket,
347             int transformId,
348             int direction,
349             in @utf8InCpp String sourceAddress,
350             in @utf8InCpp String destinationAddress,
351             int spi);
352 
353    /**
354     * Remove an IPsec SA from a given socket. This will allow unencrypted traffic to flow
355     * on that socket if a transform had been previously applied.
356     *
357     * @param socket a user-provided socket from which to remove any IPsec configuration
358     */
ipSecRemoveTransportModeTransform( in ParcelFileDescriptor socket)359     void ipSecRemoveTransportModeTransform(
360             in ParcelFileDescriptor socket);
361 
362    /**
363     * Adds an IPsec global policy.
364     *
365     * @param transformId a unique identifier for allocated resources
366     * @param selAddrFamily the address family identifier for the selector
367     * @param direction DIRECTION_IN or DIRECTION_OUT
368     * @param tmplSrcAddress InetAddress as string for the sending endpoint
369     * @param tmplDstAddress InetAddress as string for the receiving endpoint
370     * @param spi a 32-bit unique ID allocated to the user
371     * @param markValue a 32-bit unique ID chosen by the user
372     * @param markMask a 32-bit mask chosen by the user
373     * @param interfaceId the identifier for the IPsec tunnel interface.
374     */
ipSecAddSecurityPolicy( int transformId, int selAddrFamily, int direction, in @utf8InCpp String tmplSrcAddress, in @utf8InCpp String tmplDstAddress, int spi, int markValue, int markMask, int interfaceId)375     void ipSecAddSecurityPolicy(
376             int transformId,
377             int selAddrFamily,
378             int direction,
379             in @utf8InCpp String tmplSrcAddress,
380             in @utf8InCpp String tmplDstAddress,
381             int spi,
382             int markValue,
383             int markMask,
384             int interfaceId);
385 
386    /**
387     * Updates an IPsec global policy.
388     *
389     * @param transformId a unique identifier for allocated resources
390     * @param selAddrFamily the address family identifier for the selector
391     * @param direction DIRECTION_IN or DIRECTION_OUT
392     * @param tmplSrcAddress InetAddress as string for the sending endpoint
393     * @param tmplDstAddress InetAddress as string for the receiving endpoint
394     * @param spi a 32-bit unique ID allocated to the user
395     * @param markValue a 32-bit unique ID chosen by the user
396     * @param markMask a 32-bit mask chosen by the user
397     * @param interfaceId the identifier for the IPsec tunnel interface.
398     */
ipSecUpdateSecurityPolicy( int transformId, int selAddrFamily, int direction, in @utf8InCpp String tmplSrcAddress, in @utf8InCpp String tmplDstAddress, int spi, int markValue, int markMask, int interfaceId)399     void ipSecUpdateSecurityPolicy(
400             int transformId,
401             int selAddrFamily,
402             int direction,
403             in @utf8InCpp String tmplSrcAddress,
404             in @utf8InCpp String tmplDstAddress,
405             int spi,
406             int markValue,
407             int markMask,
408             int interfaceId);
409 
410    /**
411     * Deletes an IPsec global policy.
412     *
413     * Deletion of global policies does not do any matching based on the templates, thus
414     * template source/destination addresses are not needed (as opposed to add/update).
415     *
416     * @param transformId a unique identifier for allocated resources
417     * @param selAddrFamily the address family identifier for the selector
418     * @param direction DIRECTION_IN or DIRECTION_OUT
419     * @param markValue a 32-bit unique ID chosen by the user
420     * @param markMask a 32-bit mask chosen by the user
421     * @param interfaceId the identifier for the IPsec tunnel interface.
422     */
ipSecDeleteSecurityPolicy( int transformId, int selAddrFamily, int direction, int markValue, int markMask, int interfaceId)423     void ipSecDeleteSecurityPolicy(
424             int transformId,
425             int selAddrFamily,
426             int direction,
427             int markValue,
428             int markMask,
429             int interfaceId);
430 
431     // This could not be declared as @uft8InCpp; thus, when used in native code it must be
432     // converted from a UTF-16 string to an ASCII string.
433     const String IPSEC_INTERFACE_PREFIX = "ipsec";
434 
435    /**
436     * Add a IPsec Tunnel Interface.
437     *
438     * @param devName a unique identifier that represents the name of the device
439     * @param localAddress InetAddress as string for the local endpoint
440     * @param remoteAddress InetAddress as string for the remote endpoint
441     * @param iKey, to match Policies and SAs for input packets.
442     * @param oKey, to match Policies and SAs for output packets.
443     * @param interfaceId the identifier for the IPsec tunnel interface.
444     */
ipSecAddTunnelInterface( in @tf8InCpp String deviceName, in @utf8InCpp String localAddress, in @utf8InCpp String remoteAddress, int iKey, int oKey, int interfaceId)445     void ipSecAddTunnelInterface(
446             in @utf8InCpp String deviceName,
447             in @utf8InCpp String localAddress,
448             in @utf8InCpp String remoteAddress,
449             int iKey,
450             int oKey,
451             int interfaceId);
452 
453    /**
454     * Update a IPsec Tunnel Interface.
455     *
456     * @param devName a unique identifier that represents the name of the device
457     * @param localAddress InetAddress as string for the local endpoint
458     * @param remoteAddress InetAddress as string for the remote endpoint
459     * @param iKey, to match Policies and SAs for input packets.
460     * @param oKey, to match Policies and SAs for output packets.
461     * @param interfaceId the identifier for the IPsec tunnel interface.
462     */
ipSecUpdateTunnelInterface( in @tf8InCpp String deviceName, in @utf8InCpp String localAddress, in @utf8InCpp String remoteAddress, int iKey, int oKey, int interfaceId)463     void ipSecUpdateTunnelInterface(
464             in @utf8InCpp String deviceName,
465             in @utf8InCpp String localAddress,
466             in @utf8InCpp String remoteAddress,
467             int iKey,
468             int oKey,
469             int interfaceId);
470 
471    /**
472     * Removes a IPsec Tunnel Interface.
473     *
474     * @param devName a unique identifier that represents the name of the device
475     */
ipSecRemoveTunnelInterface(in @tf8InCpp String deviceName)476     void ipSecRemoveTunnelInterface(in @utf8InCpp String deviceName);
477 
478    /**
479     * Request notification of wakeup packets arriving on an interface. Notifications will be
480     * delivered to INetdEventListener.onWakeupEvent().
481     *
482     * @param ifName the interface
483     * @param prefix arbitrary string used to identify wakeup sources in onWakeupEvent
484     */
wakeupAddInterface(in @tf8InCpp String ifName, in @utf8InCpp String prefix, int mark, int mask)485     void wakeupAddInterface(in @utf8InCpp String ifName, in @utf8InCpp String prefix, int mark, int mask);
486 
487    /**
488     * Stop notification of wakeup packets arriving on an interface.
489     *
490     * @param ifName the interface
491     * @param prefix arbitrary string used to identify wakeup sources in onWakeupEvent
492     */
wakeupDelInterface(in @tf8InCpp String ifName, in @utf8InCpp String prefix, int mark, int mask)493     void wakeupDelInterface(in @utf8InCpp String ifName, in @utf8InCpp String prefix, int mark, int mask);
494 
495     const int IPV6_ADDR_GEN_MODE_EUI64 = 0;
496     const int IPV6_ADDR_GEN_MODE_NONE = 1;
497     const int IPV6_ADDR_GEN_MODE_STABLE_PRIVACY = 2;
498     const int IPV6_ADDR_GEN_MODE_RANDOM = 3;
499 
500     const int IPV6_ADDR_GEN_MODE_DEFAULT = 0;
501    /**
502     * Set IPv6 address generation mode. IPv6 should be disabled before changing mode.
503     *
504     * @param mode SLAAC address generation mechanism to use
505     */
setIPv6AddrGenMode(in @tf8InCpp String ifName, int mode)506     void setIPv6AddrGenMode(in @utf8InCpp String ifName, int mode);
507 
508    /**
509     * Add idletimer for specific interface
510     *
511     * @param ifName Name of target interface
512     * @param timeout The time in seconds that will trigger idletimer
513     * @param classLabel The unique identifier for this idletimer
514     * @throws ServiceSpecificException in case of failure, with an error code indicating the
515     *         cause of the failure.
516     */
idletimerAddInterface( in @tf8InCpp String ifName, int timeout, in @utf8InCpp String classLabel)517     void idletimerAddInterface(
518             in @utf8InCpp String ifName,
519             int timeout,
520             in @utf8InCpp String classLabel);
521 
522    /**
523     * Remove idletimer for specific interface
524     *
525     * @param ifName Name of target interface
526     * @param timeout The time in seconds that will trigger idletimer
527     * @param classLabel The unique identifier for this idletimer
528     * @throws ServiceSpecificException in case of failure, with an error code indicating the
529     *         cause of the failure.
530     */
idletimerRemoveInterface( in @tf8InCpp String ifName, int timeout, in @utf8InCpp String classLabel)531     void idletimerRemoveInterface(
532             in @utf8InCpp String ifName,
533             int timeout,
534             in @utf8InCpp String classLabel);
535 
536     const int PENALTY_POLICY_ACCEPT = 1;
537     const int PENALTY_POLICY_LOG = 2;
538     const int PENALTY_POLICY_REJECT = 3;
539 
540    /**
541     * Offers to detect sockets sending data not wrapped inside a layer of SSL/TLS encryption.
542     *
543     * @param uid Uid of the app
544     * @param policyPenalty The penalty policy of the app
545     * @throws ServiceSpecificException in case of failure, with an error code indicating the
546     *         cause of the failure.
547     */
strictUidCleartextPenalty(int uid, int policyPenalty)548     void strictUidCleartextPenalty(int uid, int policyPenalty);
549 
550    /**
551     * Start clatd
552     *
553     * @deprecated This method has no effect and throws UnsupportedOperationException. The clatd
554     *             control plane moved to the mainline module starting in T. See ClatCoordinator.
555     * @param ifName interface name to start clatd
556     * @param nat64Prefix the NAT64 prefix, e.g., "2001:db8:64::/96".
557     * @return a string, the IPv6 address that will be used for 464xlat.
558     * @throws ServiceSpecificException in case of failure, with an error code indicating the
559     *         cause of the failure.
560     */
clatdStart(in @tf8InCpp String ifName, in @utf8InCpp String nat64Prefix)561     @utf8InCpp String clatdStart(in @utf8InCpp String ifName, in @utf8InCpp String nat64Prefix);
562 
563    /**
564     * Stop clatd
565     *
566     * @deprecated This method has no effect and throws UnsupportedOperationException. The clatd
567     *             control plane moved to the mainline module starting in T. See ClatCoordinator.
568     * @param ifName interface name to stop clatd
569     * @throws ServiceSpecificException in case of failure, with an error code indicating the
570     *         cause of the failure.
571     */
clatdStop(in @tf8InCpp String ifName)572     void clatdStop(in @utf8InCpp String ifName);
573 
574     /**
575      * Packet mark that identifies non-offloaded ingress clat packets.
576      */
577     const int CLAT_MARK = 0xdeadc1a7;
578 
579    /**
580     * Get status of IP forwarding
581     *
582     * @return true if IP forwarding is enabled, false otherwise.
583     */
ipfwdEnabled()584     boolean ipfwdEnabled();
585 
586    /**
587     * Get requester list of IP forwarding
588     *
589     * @return An array of strings containing requester list of IP forwarding
590     */
ipfwdGetRequesterList()591     @utf8InCpp String[] ipfwdGetRequesterList();
592 
593    /**
594     * Enable IP forwarding for specific requester
595     *
596     * @param requester requester name to enable IP forwarding. It is a unique name which will be
597     *                  stored in Netd to make sure if any requester needs IP forwarding.
598     * @throws ServiceSpecificException in case of failure, with an error code indicating the
599     *         cause of the failure.
600     */
ipfwdEnableForwarding(in @tf8InCpp String requester)601     void ipfwdEnableForwarding(in @utf8InCpp String requester);
602 
603    /**
604     * Disable IP forwarding for specific requester
605     *
606     * @param requester requester name to disable IP forwarding. This name should match the
607     *                  names which are set by ipfwdEnableForwarding.
608     *                  IP forwarding would be disabled if it is the last requester.
609     * @throws ServiceSpecificException in case of failure, with an error code indicating the
610     *         cause of the failure.
611     */
ipfwdDisableForwarding(in @tf8InCpp String requester)612     void ipfwdDisableForwarding(in @utf8InCpp String requester);
613 
614    /**
615     * Add forwarding ip rule
616     *
617     * @param fromIface interface name to add forwarding ip rule
618     * @param toIface interface name to add forwarding ip rule
619     * @throws ServiceSpecificException in case of failure, with an error code indicating the
620     *         cause of the failure.
621     */
ipfwdAddInterfaceForward(in @tf8InCpp String fromIface, in @utf8InCpp String toIface)622     void ipfwdAddInterfaceForward(in @utf8InCpp String fromIface, in @utf8InCpp String toIface);
623 
624    /**
625     * Remove forwarding ip rule
626     *
627     * @param fromIface interface name to remove forwarding ip rule
628     * @param toIface interface name to remove forwarding ip rule
629     * @throws ServiceSpecificException in case of failure, with an error code indicating the
630     *         cause of the failure.
631     */
ipfwdRemoveInterfaceForward(in @tf8InCpp String fromIface, in @utf8InCpp String toIface)632     void ipfwdRemoveInterfaceForward(in @utf8InCpp String fromIface, in @utf8InCpp String toIface);
633 
634    /**
635     * Set quota for interface
636     *
637     * @param ifName Name of target interface
638     * @param bytes Quota value in bytes
639     * @throws ServiceSpecificException in case of failure, with an error code indicating the
640     *         cause of the failure.
641     */
bandwidthSetInterfaceQuota(in @tf8InCpp String ifName, long bytes)642     void bandwidthSetInterfaceQuota(in @utf8InCpp String ifName, long bytes);
643 
644    /**
645     * Remove quota for interface
646     *
647     * @param ifName Name of target interface
648     * @throws ServiceSpecificException in case of failure, with an error code indicating the
649     *         cause of the failure.
650     */
bandwidthRemoveInterfaceQuota(in @tf8InCpp String ifName)651     void bandwidthRemoveInterfaceQuota(in @utf8InCpp String ifName);
652 
653    /**
654     * Set alert for interface
655     *
656     * @param ifName Name of target interface
657     * @param bytes Alert value in bytes
658     * @throws ServiceSpecificException in case of failure, with an error code indicating the
659     *         cause of the failure.
660     */
bandwidthSetInterfaceAlert(in @tf8InCpp String ifName, long bytes)661     void bandwidthSetInterfaceAlert(in @utf8InCpp String ifName, long bytes);
662 
663    /**
664     * Remove alert for interface
665     *
666     * @param ifName Name of target interface
667     * @throws ServiceSpecificException in case of failure, with an error code indicating the
668     *         cause of the failure.
669     */
bandwidthRemoveInterfaceAlert(in @tf8InCpp String ifName)670     void bandwidthRemoveInterfaceAlert(in @utf8InCpp String ifName);
671 
672    /**
673     * Set global alert
674     *
675     * @param bytes Alert value in bytes
676     * @throws ServiceSpecificException in case of failure, with an error code indicating the
677     *         cause of the failure.
678     */
bandwidthSetGlobalAlert(long bytes)679     void bandwidthSetGlobalAlert(long bytes);
680 
681    /**
682     * Add naughty app bandwidth rule for specific app
683     *
684     * @param uid uid of target app
685     * @throws ServiceSpecificException in case of failure, with an error code indicating the
686     *         cause of the failure.
687     * @deprecated unimplemented on T+.
688     */
bandwidthAddNaughtyApp(int uid)689     void bandwidthAddNaughtyApp(int uid);
690 
691    /**
692     * Remove naughty app bandwidth rule for specific app
693     *
694     * @param uid uid of target app
695     * @throws ServiceSpecificException in case of failure, with an error code indicating the
696     *         cause of the failure.
697     * @deprecated unimplemented on T+.
698     */
bandwidthRemoveNaughtyApp(int uid)699     void bandwidthRemoveNaughtyApp(int uid);
700 
701    /**
702     * Add nice app bandwidth rule for specific app
703     *
704     * @param uid uid of target app
705     * @throws ServiceSpecificException in case of failure, with an error code indicating the
706     *         cause of the failure.
707     * @deprecated unimplemented on T+.
708     */
bandwidthAddNiceApp(int uid)709     void bandwidthAddNiceApp(int uid);
710 
711    /**
712     * Remove nice app bandwidth rule for specific app
713     *
714     * @param uid uid of target app
715     * @throws ServiceSpecificException in case of failure, with an error code indicating the
716     *         cause of the failure.
717     * @deprecated unimplemented on T+.
718     */
bandwidthRemoveNiceApp(int uid)719     void bandwidthRemoveNiceApp(int uid);
720 
721    /**
722     * Start tethering
723     *
724     * @param dhcpRanges dhcp ranges to set.
725     *                   dhcpRanges might contain many addresss {addr1, addr2, aadr3, addr4...}
726     *                   Netd splits them into ranges: addr1-addr2, addr3-addr4, etc.
727     *                   An odd number of addrs will fail.
728     * @throws ServiceSpecificException in case of failure, with an error code indicating the
729     *         cause of the failure.
730     */
tetherStart(in @tf8InCpp String[] dhcpRanges)731     void tetherStart(in @utf8InCpp String[] dhcpRanges);
732 
733    /**
734     * Stop tethering
735     *
736     * @throws ServiceSpecificException in case of failure, with an error code indicating the
737     *         cause of the failure.
738     */
tetherStop()739     void tetherStop();
740 
741    /**
742     * Get status of tethering
743     *
744     * @return true if tethering is enabled, false otherwise.
745     */
tetherIsEnabled()746     boolean tetherIsEnabled();
747 
748    /**
749     * Setup interface for tethering
750     *
751     * @param ifName interface name to add
752     * @throws ServiceSpecificException in case of failure, with an error code indicating the
753     *         cause of the failure.
754     */
tetherInterfaceAdd(in @tf8InCpp String ifName)755     void tetherInterfaceAdd(in @utf8InCpp String ifName);
756 
757    /**
758     * Reset interface for tethering
759     *
760     * @param ifName interface name to remove
761     * @throws ServiceSpecificException in case of failure, with an error code indicating the
762     *         cause of the failure.
763     */
tetherInterfaceRemove(in @tf8InCpp String ifName)764     void tetherInterfaceRemove(in @utf8InCpp String ifName);
765 
766    /**
767     * Get the interface list which is stored in netd
768     * The list contains the interfaces managed by tetherInterfaceAdd/tetherInterfaceRemove
769     *
770     * @return An array of strings containing interface list result
771     */
tetherInterfaceList()772     @utf8InCpp String[] tetherInterfaceList();
773 
774    /**
775     * Set DNS forwarder server
776     *
777     * @param netId the upstream network to forward DNS queries to
778     * @param dnsAddrs DNS server address to set
779     * @throws ServiceSpecificException in case of failure, with an error code indicating the
780     *         cause of the failure.
781     */
tetherDnsSet(int netId, in @utf8InCpp String[] dnsAddrs)782     void tetherDnsSet(int netId, in @utf8InCpp String[] dnsAddrs);
783 
784    /**
785     * Return the DNS list set by tetherDnsSet
786     *
787     * @return An array of strings containing the list of DNS servers
788     */
tetherDnsList()789     @utf8InCpp String[] tetherDnsList();
790 
791     const int LOCAL_NET_ID = 99;
792 
793     /**
794      * Constant net ID for the "dummy" network.
795      *
796      * The dummy network is used to blackhole or reject traffic. Any attempt to use it will
797      * either drop the packets or fail with ENETUNREACH.
798      */
799     const int DUMMY_NET_ID = 51;
800 
801     /**
802      * Constant net ID for the "unreachable" network.
803      *
804      * The unreachable network is used to reject traffic. Any attempt to use it will fail
805      * with ENETUNREACH.
806      */
807     const int UNREACHABLE_NET_ID = 52;
808 
809     // Route does not specify a next hop
810     const String NEXTHOP_NONE = "";
811     // Route next hop is unreachable
812     const String NEXTHOP_UNREACHABLE = "unreachable";
813     // Route next hop is throw
814     const String NEXTHOP_THROW = "throw";
815 
816    /**
817     * Add a route for specific network
818     *
819     * @param netId the network to add the route to
820     * @param ifName the name of interface of the route.
821     *               This interface should be assigned to the netID.
822     * @param destination the destination of the route
823     * @param nextHop The route's next hop address,
824     *                or it could be either NEXTHOP_NONE, NEXTHOP_UNREACHABLE, NEXTHOP_THROW.
825     * @throws ServiceSpecificException in case of failure, with an error code indicating the
826     *         cause of the failure.
827     */
networkAddRoute( int netId, in @utf8InCpp String ifName, in @utf8InCpp String destination, in @utf8InCpp String nextHop)828     void networkAddRoute(
829             int netId,
830             in @utf8InCpp String ifName,
831             in @utf8InCpp String destination,
832             in @utf8InCpp String nextHop);
833 
834    /**
835     * Remove a route for specific network
836     *
837     * @param netId the network to remove the route from
838     * @param ifName the name of interface of the route.
839     *               This interface should be assigned to the netID.
840     * @param destination the destination of the route
841     * @param nextHop The route's next hop address,
842     *                or it could be either NEXTHOP_NONE, NEXTHOP_UNREACHABLE, NEXTHOP_THROW.
843     * @throws ServiceSpecificException in case of failure, with an error code indicating the
844     *         cause of the failure.
845     */
networkRemoveRoute( int netId, in @utf8InCpp String ifName, in @utf8InCpp String destination, in @utf8InCpp String nextHop)846     void networkRemoveRoute(
847             int netId,
848             in @utf8InCpp String ifName,
849             in @utf8InCpp String destination,
850             in @utf8InCpp String nextHop);
851 
852    /**
853     * Add a route to legacy routing table for specific network
854     *
855     * @param netId the network to add the route to
856     * @param ifName the name of interface of the route.
857     *               This interface should be assigned to the netID.
858     * @param destination the destination of the route
859     * @param nextHop The route's next hop address,
860     *                or it could be either NEXTHOP_NONE, NEXTHOP_UNREACHABLE, NEXTHOP_THROW.
861     * @param uid uid of the user
862     * @throws ServiceSpecificException in case of failure, with an error code indicating the
863     *         cause of the failure.
864     */
networkAddLegacyRoute( int netId, in @utf8InCpp String ifName, in @utf8InCpp String destination, in @utf8InCpp String nextHop, int uid)865     void networkAddLegacyRoute(
866             int netId,
867             in @utf8InCpp String ifName,
868             in @utf8InCpp String destination,
869             in @utf8InCpp String nextHop,
870             int uid);
871 
872    /**
873     * Remove a route from legacy routing table for specific network
874     *
875     * @param netId the network to remove the route from
876     * @param ifName the name of interface of the route.
877     *               This interface should be assigned to the netID.
878     * @param destination the destination of the route
879     * @param nextHop The route's next hop address,
880     *                or it could be either NEXTHOP_NONE, NEXTHOP_UNREACHABLE, NEXTHOP_THROW.
881     * @param uid uid of the user
882     * @throws ServiceSpecificException in case of failure, with an error code indicating the
883     *         cause of the failure.
884     */
networkRemoveLegacyRoute( int netId, in @utf8InCpp String ifName, in @utf8InCpp String destination, in @utf8InCpp String nextHop, int uid)885     void networkRemoveLegacyRoute(
886             int netId,
887             in @utf8InCpp String ifName,
888             in @utf8InCpp String destination,
889             in @utf8InCpp String nextHop,
890             int uid);
891 
892    /**
893     * Get default network
894     *
895     * @return netId of default network
896     */
networkGetDefault()897     int networkGetDefault();
898 
899    /**
900     * Set network as default network
901     *
902     * @param netId the network to set as the default
903     * @throws ServiceSpecificException in case of failure, with an error code indicating the
904     *         cause of the failure.
905     */
networkSetDefault(int netId)906     void networkSetDefault(int netId);
907 
908    /**
909     * Clear default network
910     *
911     * @throws ServiceSpecificException in case of failure, with an error code indicating the
912     *         cause of the failure.
913     */
networkClearDefault()914     void networkClearDefault();
915 
916    /**
917     * PERMISSION_NONE is used for regular networks and apps. TODO: use PERMISSION_INTERNET
918     * for this instead, and use PERMISSION_NONE to indicate no network permissions at all.
919     */
920     const int PERMISSION_NONE = 0;
921 
922    /**
923     * PERMISSION_NETWORK represents the CHANGE_NETWORK_STATE permission.
924     */
925     const int PERMISSION_NETWORK = 1;
926 
927    /**
928     * PERMISSION_SYSTEM represents the ability to use restricted networks. This is mostly
929     * equivalent to the CONNECTIVITY_USE_RESTRICTED_NETWORKS permission.
930     */
931     const int PERMISSION_SYSTEM = 2;
932 
933    /**
934     * NO_PERMISSIONS indicates that this app is installed and doesn't have either
935     * PERMISSION_INTERNET or PERMISSION_UPDATE_DEVICE_STATS.
936     * TODO: use PERMISSION_NONE to represent this case
937     */
938     const int NO_PERMISSIONS = 0;
939 
940    /**
941     * PERMISSION_INTERNET indicates that the app can create AF_INET and AF_INET6 sockets
942     */
943     const int PERMISSION_INTERNET = 4;
944 
945    /**
946     * PERMISSION_UPDATE_DEVICE_STATS is used for system UIDs and privileged apps
947     * that have the UPDATE_DEVICE_STATS permission
948     */
949     const int PERMISSION_UPDATE_DEVICE_STATS = 8;
950 
951    /**
952     * PERMISSION_UNINSTALLED is used when an app is uninstalled from the device. All internet
953     * related permissions need to be cleaned
954     */
955     const int PERMISSION_UNINSTALLED = -1;
956 
957 
958    /**
959     * Sets the permission required to access a specific network.
960     *
961     * @param netId the network to set
962     * @param permission network permission to use
963     * @throws ServiceSpecificException in case of failure, with an error code indicating the
964     *         cause of the failure.
965     */
networkSetPermissionForNetwork(int netId, int permission)966     void networkSetPermissionForNetwork(int netId, int permission);
967 
968    /**
969     * Assigns network access permissions to the specified users.
970     *
971     * @param permission network permission to use
972     * @param uids uid of users to set permission
973     */
networkSetPermissionForUser(int permission, in int[] uids)974     void networkSetPermissionForUser(int permission, in int[] uids);
975 
976    /**
977     * Clears network access permissions for the specified users.
978     *
979     * @param uids uid of users to clear permission
980     */
networkClearPermissionForUser(in int[] uids)981     void networkClearPermissionForUser(in int[] uids);
982 
983    /**
984     * Assigns android.permission.INTERNET and/or android.permission.UPDATE_DEVICE_STATS to the uids
985     * specified. Or remove all permissions from the uids.
986     *
987     * @param permission The permission to grant, it could be either PERMISSION_INTERNET and/or
988     *                   PERMISSION_UPDATE_DEVICE_STATS. If the permission is NO_PERMISSIONS, then
989     *                   revoke all permissions for the uids.
990     * @param uids uid of users to grant permission
991     * @deprecated unimplemented on T+.
992     */
trafficSetNetPermForUids(int permission, in int[] uids)993     void trafficSetNetPermForUids(int permission, in int[] uids);
994 
995    /**
996     * Gives the specified user permission to protect sockets from VPNs.
997     * Typically used by VPN apps themselves, to ensure that the sockets
998     * they use to communicate with the VPN server aren't routed through
999     * the VPN network.
1000     *
1001     * @param uid uid of user to set
1002     */
networkSetProtectAllow(int uid)1003     void networkSetProtectAllow(int uid);
1004 
1005    /**
1006     * Removes the permission to protect sockets from VPN.
1007     *
1008     * @param uid uid of user to set
1009     */
networkSetProtectDeny(int uid)1010     void networkSetProtectDeny(int uid);
1011 
1012    /**
1013     * Get the status of network protect for user
1014     *
1015     * @param uids uid of user
1016     * @return true if the user can protect sockets from VPN, false otherwise.
1017     */
networkCanProtect(int uid)1018     boolean networkCanProtect(int uid);
1019 
1020     /** Only allows packets from specific UID/Interface.
1021         @deprecated use FIREWALL_ALLOWLIST. */
1022     const int FIREWALL_WHITELIST = 0;
1023 
1024     /** Only allows packets from specific UID/Interface. */
1025     const int FIREWALL_ALLOWLIST = 0;
1026 
1027     /** Blocks packets from specific UID/Interface.
1028         @deprecated use FIREWALL_DENYLIST. */
1029     const int FIREWALL_BLACKLIST = 1;
1030 
1031     /** Blocks packets from specific UID/Interface. */
1032     const int FIREWALL_DENYLIST = 1;
1033 
1034    /**
1035     * Set type of firewall
1036     * Type allowlist only allows packets from specific UID/Interface
1037     * Type denylist blocks packets from specific UID/Interface
1038     *
1039     * @param firewalltype type of firewall, either FIREWALL_ALLOWLIST or FIREWALL_DENYLIST
1040     * @throws ServiceSpecificException in case of failure, with an error code indicating the
1041     *         cause of the failure.
1042     */
firewallSetFirewallType(int firewalltype)1043     void firewallSetFirewallType(int firewalltype);
1044 
1045     // Specify allow Rule which allows packets
1046     const int FIREWALL_RULE_ALLOW = 1;
1047     // Specify deny Rule which drops packets
1048     const int FIREWALL_RULE_DENY = 2;
1049 
1050     // No specific chain is chosen, use general firewall chain(fw_input, fw_output)
1051     const int FIREWALL_CHAIN_NONE = 0;
1052     // Specify DOZABLE chain(fw_dozable) which is used in dozable mode
1053     const int FIREWALL_CHAIN_DOZABLE = 1;
1054     // Specify STANDBY chain(fw_standby) which is used in standby mode
1055     const int FIREWALL_CHAIN_STANDBY = 2;
1056     // Specify POWERSAVE chain(fw_powersave) which is used in power save mode
1057     const int FIREWALL_CHAIN_POWERSAVE = 3;
1058     // Specify RESTRICTED chain(fw_restricted) which is used in restricted
1059     // networking mode
1060     const int FIREWALL_CHAIN_RESTRICTED = 4;
1061 
1062    /**
1063     * Set firewall rule for interface
1064     *
1065     * @param ifName the interface to allow/deny
1066     * @param firewallRule either FIREWALL_RULE_ALLOW or FIREWALL_RULE_DENY
1067     * @throws ServiceSpecificException in case of failure, with an error code indicating the
1068     *         cause of the failure.
1069     */
firewallSetInterfaceRule(in @tf8InCpp String ifName, int firewallRule)1070     void firewallSetInterfaceRule(in @utf8InCpp String ifName, int firewallRule);
1071 
1072    /**
1073     * Set firewall rule for uid
1074     *
1075     * @param childChain target chain
1076     * @param uid uid to allow/deny
1077     * @param firewallRule either FIREWALL_RULE_ALLOW or FIREWALL_RULE_DENY
1078     * @throws ServiceSpecificException in case of failure, with an error code indicating the
1079     *         cause of the failure.
1080     * @deprecated unimplemented on T+.
1081     */
firewallSetUidRule(int childChain, int uid, int firewallRule)1082     void firewallSetUidRule(int childChain, int uid, int firewallRule);
1083 
1084    /**
1085     * Enable/Disable target firewall child chain
1086     *
1087     * @param childChain target chain to enable
1088     * @param enable whether to enable or disable child chain.
1089     * @throws ServiceSpecificException in case of failure, with an error code indicating the
1090     *         cause of the failure.
1091     * @deprecated unimplemented on T+.
1092     */
firewallEnableChildChain(int childChain, boolean enable)1093     void firewallEnableChildChain(int childChain, boolean enable);
1094 
1095    /**
1096     * Get interface list
1097     *
1098     * @return An array of strings containing all the interfaces on the system.
1099     * @throws ServiceSpecificException in case of failure, with an error code corresponding to the
1100     *         unix errno.
1101     */
interfaceGetList()1102     @utf8InCpp String[] interfaceGetList();
1103 
1104     // Must be kept in sync with constant in InterfaceConfiguration.java
1105     const String IF_STATE_UP = "up";
1106     const String IF_STATE_DOWN = "down";
1107 
1108     const String IF_FLAG_BROADCAST = "broadcast";
1109     const String IF_FLAG_LOOPBACK = "loopback";
1110     const String IF_FLAG_POINTOPOINT = "point-to-point";
1111     const String IF_FLAG_RUNNING = "running";
1112     const String IF_FLAG_MULTICAST = "multicast";
1113 
1114    /**
1115     * Get interface configuration
1116     *
1117     * @param ifName interface name
1118     * @return An InterfaceConfigurationParcel for the specified interface.
1119     * @throws ServiceSpecificException in case of failure, with an error code corresponding to the
1120     *         unix errno.
1121     */
interfaceGetCfg(in @tf8InCpp String ifName)1122     InterfaceConfigurationParcel interfaceGetCfg(in @utf8InCpp String ifName);
1123 
1124    /**
1125     * Set interface configuration
1126     *
1127     * @param cfg Interface configuration to set
1128     * @throws ServiceSpecificException in case of failure, with an error code corresponding to the
1129     *         unix errno.
1130     */
interfaceSetCfg(in InterfaceConfigurationParcel cfg)1131     void interfaceSetCfg(in InterfaceConfigurationParcel cfg);
1132 
1133    /**
1134     * Set interface IPv6 privacy extensions
1135     *
1136     * @param ifName interface name
1137     * @param enable whether to enable or disable this setting.
1138     * @throws ServiceSpecificException in case of failure, with an error code indicating the
1139     *         cause of the failure.
1140     */
interfaceSetIPv6PrivacyExtensions(in @tf8InCpp String ifName, boolean enable)1141     void interfaceSetIPv6PrivacyExtensions(in @utf8InCpp String ifName, boolean enable);
1142 
1143    /**
1144     * Clear all IP addresses on the given interface
1145     *
1146     * @param ifName interface name
1147     * @throws ServiceSpecificException in case of failure, with an error code corresponding to the
1148     *         POSIX errno.
1149     */
interfaceClearAddrs(in @tf8InCpp String ifName)1150     void interfaceClearAddrs(in @utf8InCpp String ifName);
1151 
1152    /**
1153     * Enable or disable IPv6 on the given interface
1154     *
1155     * @param ifName interface name
1156     * @param enable whether to enable or disable this setting.
1157     * @throws ServiceSpecificException in case of failure, with an error code indicating the
1158     *         cause of the failure.
1159     */
interfaceSetEnableIPv6(in @tf8InCpp String ifName, boolean enable)1160     void interfaceSetEnableIPv6(in @utf8InCpp String ifName, boolean enable);
1161 
1162    /**
1163     * Set interface MTU
1164     *
1165     * @param ifName interface name
1166     * @param mtu MTU value
1167     * @throws ServiceSpecificException in case of failure, with an error code indicating the
1168     *         cause of the failure.
1169     */
interfaceSetMtu(in @tf8InCpp String ifName, int mtu)1170     void interfaceSetMtu(in @utf8InCpp String ifName, int mtu);
1171 
1172    /**
1173     * Add forwarding rule/stats on given interface.
1174     *
1175     * @param intIface downstream interface
1176     * @param extIface upstream interface
1177     */
tetherAddForward(in @tf8InCpp String intIface, in @utf8InCpp String extIface)1178     void tetherAddForward(in @utf8InCpp String intIface, in @utf8InCpp String extIface);
1179 
1180    /**
1181     * Remove forwarding rule/stats on given interface.
1182     *
1183     * @param intIface downstream interface
1184     * @param extIface upstream interface
1185     */
tetherRemoveForward(in @tf8InCpp String intIface, in @utf8InCpp String extIface)1186     void tetherRemoveForward(in @utf8InCpp String intIface, in @utf8InCpp String extIface);
1187 
1188    /**
1189     * Set the values of tcp_{rmem,wmem}.
1190     *
1191     * @param rmemValues the target values of tcp_rmem, each value is separated by spaces
1192     * @param wmemValues the target values of tcp_wmem, each value is separated by spaces
1193     * @throws ServiceSpecificException in case of failure, with an error code indicating the
1194     *         cause of the failure.
1195     */
setTcpRWmemorySize(in @tf8InCpp String rmemValues, in @utf8InCpp String wmemValues)1196     void setTcpRWmemorySize(in @utf8InCpp String rmemValues, in @utf8InCpp String wmemValues);
1197 
1198    /**
1199     * Register unsolicited event listener
1200     * Netd supports multiple unsolicited event listeners.
1201     *
1202     * @param listener unsolicited event listener to register
1203     * @throws ServiceSpecificException in case of failure, with an error code indicating the
1204     *         cause of the failure.
1205     */
registerUnsolicitedEventListener(INetdUnsolicitedEventListener listener)1206     void registerUnsolicitedEventListener(INetdUnsolicitedEventListener listener);
1207 
1208     /**
1209      * Add ingress interface filtering rules to a list of UIDs
1210      *
1211      * For a given uid, once a filtering rule is added, the kernel will only allow packets from the
1212      * allowed interface and loopback to be sent to the list of UIDs.
1213      *
1214      * Calling this method on one or more UIDs with an existing filtering rule but a different
1215      * interface name will result in the filtering rule being updated to allow the new interface
1216      * instead. Otherwise calling this method will not affect existing rules set on other UIDs.
1217      *
1218      * @param ifName the name of the interface on which the filtering rules will allow packets to
1219               be received.
1220      * @param uids an array of UIDs which the filtering rules will be set
1221      * @throws ServiceSpecificException in case of failure, with an error code indicating the
1222      *         cause of the failure.
1223      * @deprecated unimplemented on T+.
1224      */
firewallAddUidInterfaceRules(in @tf8InCpp String ifName, in int[] uids)1225     void firewallAddUidInterfaceRules(in @utf8InCpp String ifName, in int[] uids);
1226 
1227     /**
1228      * Remove ingress interface filtering rules from a list of UIDs
1229      *
1230      * Clear the ingress interface filtering rules from the list of UIDs which were previously set
1231      * by firewallAddUidInterfaceRules(). Ignore any uid which does not have filtering rule.
1232      *
1233      * @param uids an array of UIDs from which the filtering rules will be removed
1234      * @throws ServiceSpecificException in case of failure, with an error code indicating the
1235      *         cause of the failure.
1236      * @deprecated unimplemented on T+.
1237      */
firewallRemoveUidInterfaceRules(in int[] uids)1238     void firewallRemoveUidInterfaceRules(in int[] uids);
1239 
1240    /**
1241     * Request netd to change the current active network stats map.
1242     * @throws ServiceSpecificException in case of failure, with an error code indicating the
1243     *         cause of the failure.
1244     * @deprecated unimplemented on T+.
1245     */
trafficSwapActiveStatsMap()1246     void trafficSwapActiveStatsMap();
1247 
1248    /**
1249     * Retrieves OEM netd listener interface
1250     *
1251     * @return a IBinder object, it could be casted to oem specific interface.
1252     */
getOemNetd()1253     IBinder getOemNetd();
1254 
1255    /**
1256     * Start tethering with given configuration
1257     *
1258     * @param config config to start tethering.
1259     * @throws ServiceSpecificException in case of failure, with an error code indicating the
1260     *         cause of the failure.
1261     */
tetherStartWithConfiguration(in TetherConfigParcel config)1262     void tetherStartWithConfiguration(in TetherConfigParcel config);
1263 
1264 
1265     /**
1266      * Get the fwmark and its net id mask for the given network id.
1267      *
1268      * @param netId the network to get the fwmark and mask for.
1269      * @return A MarkMaskParcel of the given network id.
1270      */
getFwmarkForNetwork(int netId)1271     MarkMaskParcel getFwmarkForNetwork(int netId);
1272 
1273     /**
1274     * Add a route for specific network
1275     *
1276     * @param netId the network to add the route to
1277     * @param routeInfo parcelable with route information
1278     * @throws ServiceSpecificException in case of failure, with an error code indicating the
1279     *         cause of the failure.
1280     */
networkAddRouteParcel(int netId, in android.net.RouteInfoParcel routeInfo)1281     void networkAddRouteParcel(int netId, in android.net.RouteInfoParcel routeInfo);
1282 
1283     /**
1284     * Update a route for specific network
1285     *
1286     * @param routeInfo parcelable with route information
1287     * @throws ServiceSpecificException in case of failure, with an error code indicating the
1288     *         cause of the failure.
1289     */
networkUpdateRouteParcel(int netId, in android.net.RouteInfoParcel routeInfo)1290     void networkUpdateRouteParcel(int netId, in android.net.RouteInfoParcel routeInfo);
1291 
1292     /**
1293     * Remove a route for specific network
1294     *
1295     * @param routeInfo parcelable with route information
1296     * @throws ServiceSpecificException in case of failure, with an error code indicating the
1297     *         cause of the failure.
1298     */
networkRemoveRouteParcel(int netId, in android.net.RouteInfoParcel routeInfo)1299     void networkRemoveRouteParcel(int netId, in android.net.RouteInfoParcel routeInfo);
1300 
1301     /**
1302      * Adds a tethering offload rule, or updates it if it already exists.
1303      *
1304      * Currently, only downstream /128 IPv6 entries are supported. An existing rule will be updated
1305      * if the input interface and destination prefix match. Otherwise, a new rule will be created.
1306      *
1307      * @deprecated This method has no effect and throws UnsupportedOperationException. The mainline
1308      *             module accesses the BPF map directly starting in S. See BpfCoordinator.
1309      * @param rule The rule to add or update.
1310      * @throws ServiceSpecificException in case of failure, with an error code indicating the
1311      *                                  cause of the failure.
1312      */
tetherOffloadRuleAdd(in TetherOffloadRuleParcel rule)1313     void tetherOffloadRuleAdd(in TetherOffloadRuleParcel rule);
1314 
1315     /**
1316      * Deletes a tethering offload rule.
1317      *
1318      * Currently, only downstream /128 IPv6 entries are supported. An existing rule will be deleted
1319      * if the destination IP address and the source interface match. It is not an error if there is
1320      * no matching rule to delete.
1321      *
1322      * @deprecated This method has no effect and throws UnsupportedOperationException. The mainline
1323      *             module accesses the BPF map directly starting in S. See BpfCoordinator.
1324      * @param rule The rule to delete.
1325      * @throws ServiceSpecificException in case of failure, with an error code indicating the
1326      *                                  cause of the failure.
1327      */
tetherOffloadRuleRemove(in TetherOffloadRuleParcel rule)1328     void tetherOffloadRuleRemove(in TetherOffloadRuleParcel rule);
1329 
1330     /**
1331      * Return BPF tethering offload statistics.
1332      *
1333      * @deprecated This method has no effect and throws UnsupportedOperationException. The mainline
1334      *             module accesses the BPF map directly starting in S. See BpfCoordinator.
1335      * @return an array of TetherStatsParcel's, where each entry contains the upstream interface
1336      *         index and its tethering statistics since tethering was first started.
1337      *         There will only ever be one entry for a given interface index.
1338      * @throws ServiceSpecificException in case of failure, with an error code indicating the
1339      *         cause of the failure.
1340      */
tetherOffloadGetStats()1341     TetherStatsParcel[] tetherOffloadGetStats();
1342 
1343    /**
1344     * Set a per-interface quota for tethering offload.
1345     *
1346     * @deprecated This method has no effect and throws UnsupportedOperationException. The mainline
1347     *             module accesses the BPF map directly starting in S. See BpfCoordinator.
1348     * @param ifIndex Index of upstream interface
1349     * @param quotaBytes The quota defined as the number of bytes, starting from zero and counting
1350     *       from *now*. A value of QUOTA_UNLIMITED (-1) indicates there is no limit.
1351     * @throws ServiceSpecificException in case of failure, with an error code indicating the
1352     *         cause of the failure.
1353     */
tetherOffloadSetInterfaceQuota(int ifIndex, long quotaBytes)1354     void tetherOffloadSetInterfaceQuota(int ifIndex, long quotaBytes);
1355 
1356     /**
1357      * Return BPF tethering offload statistics and clear the stats for a given upstream.
1358      *
1359      * Must only be called once all offload rules have already been deleted for the given upstream
1360      * interface. The existing stats will be fetched and returned. The stats and the limit for the
1361      * given upstream interface will be deleted as well.
1362      *
1363      * The stats and limit for a given upstream interface must be initialized (using
1364      * tetherOffloadSetInterfaceQuota) before any offload will occur on that interface.
1365      *
1366      * @deprecated This method has no effect and throws UnsupportedOperationException. The mainline
1367      *             module accesses the BPF map directly starting in S. See BpfCoordinator.
1368      * @param ifIndex Index of upstream interface.
1369      * @return TetherStatsParcel, which contains the given upstream interface index and its
1370      *         tethering statistics since tethering was first started on that upstream interface.
1371      * @throws ServiceSpecificException in case of failure, with an error code indicating the
1372      *                                  cause of the failure.
1373      */
tetherOffloadGetAndClearStats(int ifIndex)1374      TetherStatsParcel tetherOffloadGetAndClearStats(int ifIndex);
1375 
1376     /**
1377      * Creates a network.
1378      *
1379      * @param config the configuration of network.
1380      * @throws ServiceSpecificException in case of failure, with an error code corresponding to the
1381      *         unix errno.
1382      */
networkCreate(in NativeNetworkConfig config)1383     void networkCreate(in NativeNetworkConfig config);
1384 
1385     /**
1386      * Adds the specified UID ranges to the specified network. The network can be physical or
1387      * virtual. Traffic from the UID ranges will be routed to the network by default. The possible
1388      * value of subsidiary priority for physical and unreachable networks is 0-999. 0 is the highest
1389      * priority. 0 is also the default value. Virtual network supports only the default value.
1390      *
1391      * @param NativeUidRangeConfig a parcel contains netId, UID ranges, subsidiary priority, etc.
1392      *
1393      * @throws ServiceSpecificException in case of failure, with an error code corresponding to the
1394      *         unix errno.
1395      */
networkAddUidRangesParcel(in NativeUidRangeConfig uidRangesConfig)1396     void networkAddUidRangesParcel(in NativeUidRangeConfig uidRangesConfig);
1397 
1398     /**
1399      * Removes the specified UID ranges from the specified network. The network can be physical or
1400      * virtual. Traffic from the UID ranges will no longer be routed to the network by default. The
1401      * possible value of subsidiary priority for physical and unreachable networks is 0-999. 0 is
1402      * the highest priority. 0 is also the default value. Virtual network supports only the default
1403      * value.
1404      *
1405      * @param NativeUidRangeConfig a parcel contains netId, UID ranges, subsidiary priority, etc.
1406      *
1407      * @throws ServiceSpecificException in case of failure, with an error code corresponding to the
1408      *         unix errno.
1409      */
networkRemoveUidRangesParcel(in NativeUidRangeConfig uidRangesConfig)1410     void networkRemoveUidRangesParcel(in NativeUidRangeConfig uidRangesConfig);
1411 
1412     /**
1413      * Migrate an existing IPsec tunnel mode SA to different addresses.
1414      *
1415      * If the underlying network also changes, caller must update it by
1416      * calling ipSecAddSecurityAssociation.
1417      *
1418      * @param migrateInfo parcelable with migration info.
1419      *
1420      * @throws ServiceSpecificException in case of failure, with an error code indicating the
1421      *         cause of the failure.
1422      */
ipSecMigrate(in android.net.IpSecMigrateInfoParcel migrateInfo)1423      void ipSecMigrate(in android.net.IpSecMigrateInfoParcel migrateInfo);
1424 
1425      /**
1426       * IPSEC_DIRECTION_IN is used for IPsec SAs or policies that direct traffic towards the host.
1427       */
1428      const int IPSEC_DIRECTION_IN = 0;
1429 
1430      /**
1431       * IPSEC_DIRECTION_OUT is used for IPsec SAs or policies that direct traffic away from the host.
1432       */
1433      const int IPSEC_DIRECTION_OUT = 1;
1434 
1435     /**
1436     * Set the list of allowed UIDs for all networks with restrictions.
1437     *
1438     * This list is the entire list of restrictions for all networks known by
1439     * netd. Calling this function always defines the entire list of restrictions,
1440     * and networks not in the passed list are always reset to having no
1441     * restrictions.
1442     *
1443     * @param NativeUidRangeConfig[] An array of allowlists, one per network. For each allowlist:
1444     *                               - netId: the netId on which to set the allowlist
1445     *                               - uidRanges: the UIDs allowed to use this network
1446     *                               - subPriority: unused
1447     */
setNetworkAllowlist(in NativeUidRangeConfig[] allowedNetworks)1448     void setNetworkAllowlist(in NativeUidRangeConfig[] allowedNetworks);
1449 
1450     /**
1451      * Allow the UID to explicitly select the given network even if it is subject to a VPN.
1452      *
1453      * Throws ServiceSpecificException with error code EEXISTS when trying to add a bypass rule that
1454      * already exists, and ENOENT when trying to remove a bypass rule that does not exist.
1455      *
1456      * netId specific bypass rules can be combined and are allowed to overlap with global VPN
1457      * exclusions (by calling networkSetProtectAllow / networkSetProtectDeny, or by setting netId to
1458      * 0). Adding or removing global VPN bypass rules does not affect the netId specific rules and
1459      * vice versa.
1460      *
1461      * Note that if netId is set to 0 (NETID_UNSET) this API is equivalent to
1462      * networkSetProtectAllow} / #networkSetProtectDeny.
1463      *
1464      * @param allow whether to allow or disallow the operation.
1465      * @param uid the UID
1466      * @param netId the netId that the UID is allowed to select.
1467      *
1468      * @throws ServiceSpecificException in case of failure, with an error code indicating the
1469      *         cause of the failure.
1470      */
networkAllowBypassVpnOnNetwork(boolean allow, int uid, int netId)1471     void networkAllowBypassVpnOnNetwork(boolean allow, int uid, int netId);
1472 }
1473