Home | History | Annotate | Download | only in net
      1 /*
      2  * Copyright (C) 2008 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 java.net.InetAddress;
     20 import java.net.UnknownHostException;
     21 
     22 /**
     23  * Native methods for managing network interfaces.
     24  *
     25  * {@hide}
     26  */
     27 public class NetworkUtils {
     28     /** Bring the named network interface up. */
     29     public native static int enableInterface(String interfaceName);
     30 
     31     /** Bring the named network interface down. */
     32     public native static int disableInterface(String interfaceName);
     33 
     34     /** Add a route to the specified host via the named interface. */
     35     public native static int addHostRoute(String interfaceName, int hostaddr);
     36 
     37     /** Add a default route for the named interface. */
     38     public native static int setDefaultRoute(String interfaceName, int gwayAddr);
     39 
     40     /** Return the gateway address for the default route for the named interface. */
     41     public native static int getDefaultRoute(String interfaceName);
     42 
     43     /** Remove host routes that uses the named interface. */
     44     public native static int removeHostRoutes(String interfaceName);
     45 
     46     /** Remove the default route for the named interface. */
     47     public native static int removeDefaultRoute(String interfaceName);
     48 
     49     /** Reset any sockets that are connected via the named interface. */
     50     public native static int resetConnections(String interfaceName);
     51 
     52     /**
     53      * Start the DHCP client daemon, in order to have it request addresses
     54      * for the named interface, and then configure the interface with those
     55      * addresses. This call blocks until it obtains a result (either success
     56      * or failure) from the daemon.
     57      * @param interfaceName the name of the interface to configure
     58      * @param ipInfo if the request succeeds, this object is filled in with
     59      * the IP address information.
     60      * @return {@code true} for success, {@code false} for failure
     61      */
     62     public native static boolean runDhcp(String interfaceName, DhcpInfo ipInfo);
     63 
     64     /**
     65      * Shut down the DHCP client daemon.
     66      * @param interfaceName the name of the interface for which the daemon
     67      * should be stopped
     68      * @return {@code true} for success, {@code false} for failure
     69      */
     70     public native static boolean stopDhcp(String interfaceName);
     71 
     72     /**
     73      * Release the current DHCP lease.
     74      * @param interfaceName the name of the interface for which the lease should
     75      * be released
     76      * @return {@code true} for success, {@code false} for failure
     77      */
     78     public native static boolean releaseDhcpLease(String interfaceName);
     79 
     80     /**
     81      * Return the last DHCP-related error message that was recorded.
     82      * <p/>NOTE: This string is not localized, but currently it is only
     83      * used in logging.
     84      * @return the most recent error message, if any
     85      */
     86     public native static String getDhcpError();
     87 
     88     /**
     89      * When static IP configuration has been specified, configure the network
     90      * interface according to the values supplied.
     91      * @param interfaceName the name of the interface to configure
     92      * @param ipInfo the IP address, default gateway, and DNS server addresses
     93      * with which to configure the interface.
     94      * @return {@code true} for success, {@code false} for failure
     95      */
     96     public static boolean configureInterface(String interfaceName, DhcpInfo ipInfo) {
     97         return configureNative(interfaceName,
     98             ipInfo.ipAddress,
     99             ipInfo.netmask,
    100             ipInfo.gateway,
    101             ipInfo.dns1,
    102             ipInfo.dns2);
    103     }
    104 
    105     private native static boolean configureNative(
    106         String interfaceName, int ipAddress, int netmask, int gateway, int dns1, int dns2);
    107 
    108     /**
    109      * Look up a host name and return the result as an int. Works if the argument
    110      * is an IP address in dot notation. Obviously, this can only be used for IPv4
    111      * addresses.
    112      * @param hostname the name of the host (or the IP address)
    113      * @return the IP address as an {@code int} in network byte order
    114      */
    115     public static int lookupHost(String hostname) {
    116         InetAddress inetAddress;
    117         try {
    118             inetAddress = InetAddress.getByName(hostname);
    119         } catch (UnknownHostException e) {
    120             return -1;
    121         }
    122         byte[] addrBytes;
    123         int addr;
    124         addrBytes = inetAddress.getAddress();
    125         addr = ((addrBytes[3] & 0xff) << 24)
    126                 | ((addrBytes[2] & 0xff) << 16)
    127                 | ((addrBytes[1] & 0xff) << 8)
    128                 |  (addrBytes[0] & 0xff);
    129         return addr;
    130     }
    131 
    132     public static int v4StringToInt(String str) {
    133         int result = 0;
    134         String[] array = str.split("\\.");
    135         if (array.length != 4) return 0;
    136         try {
    137             result = Integer.parseInt(array[3]);
    138             result = (result << 8) + Integer.parseInt(array[2]);
    139             result = (result << 8) + Integer.parseInt(array[1]);
    140             result = (result << 8) + Integer.parseInt(array[0]);
    141         } catch (NumberFormatException e) {
    142             return 0;
    143         }
    144         return result;
    145     }
    146 
    147     /**
    148      * Start the DHCP renew service for wimax,
    149      * This call blocks until it obtains a result (either success
    150      * or failure) from the daemon.
    151      * @param interfaceName the name of the interface to configure
    152      * @param ipInfo if the request succeeds, this object is filled in with
    153      * the IP address information.
    154      * @return {@code true} for success, {@code false} for failure
    155      * {@hide}
    156      */
    157     public native static boolean runDhcpRenew(String interfaceName, DhcpInfo ipInfo);
    158 }
    159