Use LinkProperties for IP and proxy configuration
Change-Id: I4ae817fb00141e9a742216b7fd02dca1ed228270
diff --git a/core/java/android/net/LinkAddress.java b/core/java/android/net/LinkAddress.java
index cb302da..3f03a2a 100644
--- a/core/java/android/net/LinkAddress.java
+++ b/core/java/android/net/LinkAddress.java
@@ -34,26 +34,26 @@
private final InetAddress address;
/**
- * Network prefix
+ * Network prefix length
*/
- private final int prefix;
+ private final int prefixLength;
public LinkAddress(InetAddress address, InetAddress mask) {
this.address = address;
- this.prefix = computeprefix(mask);
+ this.prefixLength = computeprefixLength(mask);
}
- public LinkAddress(InetAddress address, int prefix) {
+ public LinkAddress(InetAddress address, int prefixLength) {
this.address = address;
- this.prefix = prefix;
+ this.prefixLength = prefixLength;
}
public LinkAddress(InterfaceAddress interfaceAddress) {
this.address = interfaceAddress.getAddress();
- this.prefix = interfaceAddress.getNetworkPrefixLength();
+ this.prefixLength = interfaceAddress.getNetworkPrefixLength();
}
- private static int computeprefix(InetAddress mask) {
+ private static int computeprefixLength(InetAddress mask) {
int count = 0;
for (byte b : mask.getAddress()) {
for (int i = 0; i < 8; ++i) {
@@ -67,12 +67,12 @@
@Override
public String toString() {
- return (address == null ? "" : (address.getHostAddress() + "/" + prefix));
+ return (address == null ? "" : (address.getHostAddress() + "/" + prefixLength));
}
/**
* Compares this {@code LinkAddress} instance against the specified address
- * in {@code obj}. Two addresses are equal if their InetAddress and prefix
+ * in {@code obj}. Two addresses are equal if their InetAddress and prefixLength
* are equal
*
* @param obj the object to be tested for equality.
@@ -85,7 +85,7 @@
}
LinkAddress linkAddress = (LinkAddress) obj;
return this.address.equals(linkAddress.address) &&
- this.prefix == linkAddress.prefix;
+ this.prefixLength == linkAddress.prefixLength;
}
/**
@@ -98,8 +98,8 @@
/**
* Get network prefix length
*/
- public int getNetworkPrefix() {
- return prefix;
+ public int getNetworkPrefixLength() {
+ return prefixLength;
}
/**
@@ -118,7 +118,7 @@
if (address != null) {
dest.writeByte((byte)1);
dest.writeByteArray(address.getAddress());
- dest.writeInt(prefix);
+ dest.writeInt(prefixLength);
} else {
dest.writeByte((byte)0);
}
@@ -132,14 +132,14 @@
new Creator<LinkAddress>() {
public LinkAddress createFromParcel(Parcel in) {
InetAddress address = null;
- int prefix = 0;
+ int prefixLength = 0;
if (in.readByte() == 1) {
try {
address = InetAddress.getByAddress(in.createByteArray());
- prefix = in.readInt();
+ prefixLength = in.readInt();
} catch (UnknownHostException e) { }
}
- return new LinkAddress(address, prefix);
+ return new LinkAddress(address, prefixLength);
}
public LinkAddress[] newArray(int size) {
diff --git a/core/java/android/net/NetworkUtils.java b/core/java/android/net/NetworkUtils.java
index 01004c2..6b1fe99 100644
--- a/core/java/android/net/NetworkUtils.java
+++ b/core/java/android/net/NetworkUtils.java
@@ -146,6 +146,57 @@
}
/**
+ * Convert a IPv4 address from an InetAddress to an integer
+ * @param inetAddr is an InetAddress corresponding to the IPv4 address
+ * @return the IP address as an integer in network byte order
+ */
+ public static int inetAddressToInt(InetAddress inetAddr)
+ throws IllegalArgumentException {
+ byte [] addr = inetAddr.getAddress();
+ if (addr.length != 4) {
+ throw new IllegalArgumentException("Not an IPv4 address");
+ }
+ return ((addr[3] & 0xff) << 24) | ((addr[2] & 0xff) << 16) |
+ ((addr[1] & 0xff) << 8) | (addr[0] & 0xff);
+ }
+
+ /**
+ * Convert a network prefix length to an IPv4 netmask integer
+ * @param prefixLength
+ * @return the IPv4 netmask as an integer in network byte order
+ */
+ public static int prefixLengthToNetmaskInt(int prefixLength)
+ throws IllegalArgumentException {
+ if (prefixLength < 0 || prefixLength > 32) {
+ throw new IllegalArgumentException("Invalid prefix length (0 <= prefix <= 32)");
+ }
+ int value = 0xffffffff << (32 - prefixLength);
+ return Integer.reverseBytes(value);
+ }
+
+ public static boolean isIpAddress(String address) {
+ //TODO: Add NetworkUtils support for IPv6 configuration and
+ //remove IPv4 validation and use a generic InetAddress validation
+ try {
+ String[] parts = address.split("\\.");
+ if (parts.length != 4) {
+ return false;
+ }
+ int a = Integer.parseInt(parts[0]);
+ if (a < 0 || a > 255) return false;
+ a = Integer.parseInt(parts[1]);
+ if (a < 0 || a > 255) return false;
+ a = Integer.parseInt(parts[2]);
+ if (a < 0 || a > 255) return false;
+ a = Integer.parseInt(parts[3]);
+ if (a < 0 || a > 255) return false;
+ } catch (NumberFormatException ex) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
* Add a default route through the specified gateway.
* @param interfaceName interface on which the route should be added
* @param gw the IP address of the gateway to which the route is desired,