| /* |
| * Copyright (C) 2008 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.net; |
| |
| import java.net.InetAddress; |
| import java.net.UnknownHostException; |
| |
| /** |
| * Native methods for managing network interfaces. |
| * |
| * {@hide} |
| */ |
| public class NetworkUtils { |
| /** Bring the named network interface down. */ |
| public native static int disableInterface(String interfaceName); |
| |
| /** Add a route to the specified host via the named interface. */ |
| public native static int addHostRoute(String interfaceName, int hostaddr); |
| |
| /** Add a default route for the named interface. */ |
| public native static int setDefaultRoute(String interfaceName, int gwayAddr); |
| |
| /** Return the gateway address for the default route for the named interface. */ |
| public native static int getDefaultRoute(String interfaceName); |
| |
| /** Remove host routes that uses the named interface. */ |
| public native static int removeHostRoutes(String interfaceName); |
| |
| /** Remove the default route for the named interface. */ |
| public native static int removeDefaultRoute(String interfaceName); |
| |
| /** Reset any sockets that are connected via the named interface. */ |
| public native static int resetConnections(String interfaceName); |
| |
| /** |
| * Start the DHCP client daemon, in order to have it request addresses |
| * for the named interface, and then configure the interface with those |
| * addresses. This call blocks until it obtains a result (either success |
| * or failure) from the daemon. |
| * @param interfaceName the name of the interface to configure |
| * @param ipInfo if the request succeeds, this object is filled in with |
| * the IP address information. |
| * @return {@code true} for success, {@code false} for failure |
| */ |
| public native static boolean runDhcp(String interfaceName, DhcpInfo ipInfo); |
| |
| /** |
| * Shut down the DHCP client daemon. |
| * @param interfaceName the name of the interface for which the daemon |
| * should be stopped |
| * @return {@code true} for success, {@code false} for failure |
| */ |
| public native static boolean stopDhcp(String interfaceName); |
| |
| /** |
| * Release the current DHCP lease. |
| * @param interfaceName the name of the interface for which the lease should |
| * be released |
| * @return {@code true} for success, {@code false} for failure |
| */ |
| public native static boolean releaseDhcpLease(String interfaceName); |
| |
| /** |
| * Return the last DHCP-related error message that was recorded. |
| * <p/>NOTE: This string is not localized, but currently it is only |
| * used in logging. |
| * @return the most recent error message, if any |
| */ |
| public native static String getDhcpError(); |
| |
| /** |
| * When static IP configuration has been specified, configure the network |
| * interface according to the values supplied. |
| * @param interfaceName the name of the interface to configure |
| * @param ipInfo the IP address, default gateway, and DNS server addresses |
| * with which to configure the interface. |
| * @return {@code true} for success, {@code false} for failure |
| */ |
| public static boolean configureInterface(String interfaceName, DhcpInfo ipInfo) { |
| return configureNative(interfaceName, |
| ipInfo.ipAddress, |
| ipInfo.netmask, |
| ipInfo.gateway, |
| ipInfo.dns1, |
| ipInfo.dns2); |
| } |
| |
| private native static boolean configureNative( |
| String interfaceName, int ipAddress, int netmask, int gateway, int dns1, int dns2); |
| |
| /** |
| * Look up a host name and return the result as an int. Works if the argument |
| * is an IP address in dot notation. Obviously, this can only be used for IPv4 |
| * addresses. |
| * @param hostname the name of the host (or the IP address) |
| * @return the IP address as an {@code int} in network byte order |
| */ |
| public static int lookupHost(String hostname) { |
| InetAddress inetAddress; |
| try { |
| inetAddress = InetAddress.getByName(hostname); |
| } catch (UnknownHostException e) { |
| return -1; |
| } |
| byte[] addrBytes; |
| int addr; |
| addrBytes = inetAddress.getAddress(); |
| addr = ((addrBytes[3] & 0xff) << 24) |
| | ((addrBytes[2] & 0xff) << 16) |
| | ((addrBytes[1] & 0xff) << 8) |
| | (addrBytes[0] & 0xff); |
| return addr; |
| } |
| } |