Use LinkProperties for IP and proxy configuration
Change-Id: I4ae817fb00141e9a742216b7fd02dca1ed228270
This commit is contained in:
@@ -34,26 +34,26 @@ public class LinkAddress implements Parcelable {
|
|||||||
private final InetAddress address;
|
private final InetAddress address;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Network prefix
|
* Network prefix length
|
||||||
*/
|
*/
|
||||||
private final int prefix;
|
private final int prefixLength;
|
||||||
|
|
||||||
public LinkAddress(InetAddress address, InetAddress mask) {
|
public LinkAddress(InetAddress address, InetAddress mask) {
|
||||||
this.address = address;
|
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.address = address;
|
||||||
this.prefix = prefix;
|
this.prefixLength = prefixLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LinkAddress(InterfaceAddress interfaceAddress) {
|
public LinkAddress(InterfaceAddress interfaceAddress) {
|
||||||
this.address = interfaceAddress.getAddress();
|
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;
|
int count = 0;
|
||||||
for (byte b : mask.getAddress()) {
|
for (byte b : mask.getAddress()) {
|
||||||
for (int i = 0; i < 8; ++i) {
|
for (int i = 0; i < 8; ++i) {
|
||||||
@@ -67,12 +67,12 @@ public class LinkAddress implements Parcelable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return (address == null ? "" : (address.getHostAddress() + "/" + prefix));
|
return (address == null ? "" : (address.getHostAddress() + "/" + prefixLength));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compares this {@code LinkAddress} instance against the specified address
|
* 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
|
* are equal
|
||||||
*
|
*
|
||||||
* @param obj the object to be tested for equality.
|
* @param obj the object to be tested for equality.
|
||||||
@@ -85,7 +85,7 @@ public class LinkAddress implements Parcelable {
|
|||||||
}
|
}
|
||||||
LinkAddress linkAddress = (LinkAddress) obj;
|
LinkAddress linkAddress = (LinkAddress) obj;
|
||||||
return this.address.equals(linkAddress.address) &&
|
return this.address.equals(linkAddress.address) &&
|
||||||
this.prefix == linkAddress.prefix;
|
this.prefixLength == linkAddress.prefixLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -98,8 +98,8 @@ public class LinkAddress implements Parcelable {
|
|||||||
/**
|
/**
|
||||||
* Get network prefix length
|
* Get network prefix length
|
||||||
*/
|
*/
|
||||||
public int getNetworkPrefix() {
|
public int getNetworkPrefixLength() {
|
||||||
return prefix;
|
return prefixLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -118,7 +118,7 @@ public class LinkAddress implements Parcelable {
|
|||||||
if (address != null) {
|
if (address != null) {
|
||||||
dest.writeByte((byte)1);
|
dest.writeByte((byte)1);
|
||||||
dest.writeByteArray(address.getAddress());
|
dest.writeByteArray(address.getAddress());
|
||||||
dest.writeInt(prefix);
|
dest.writeInt(prefixLength);
|
||||||
} else {
|
} else {
|
||||||
dest.writeByte((byte)0);
|
dest.writeByte((byte)0);
|
||||||
}
|
}
|
||||||
@@ -132,14 +132,14 @@ public class LinkAddress implements Parcelable {
|
|||||||
new Creator<LinkAddress>() {
|
new Creator<LinkAddress>() {
|
||||||
public LinkAddress createFromParcel(Parcel in) {
|
public LinkAddress createFromParcel(Parcel in) {
|
||||||
InetAddress address = null;
|
InetAddress address = null;
|
||||||
int prefix = 0;
|
int prefixLength = 0;
|
||||||
if (in.readByte() == 1) {
|
if (in.readByte() == 1) {
|
||||||
try {
|
try {
|
||||||
address = InetAddress.getByAddress(in.createByteArray());
|
address = InetAddress.getByAddress(in.createByteArray());
|
||||||
prefix = in.readInt();
|
prefixLength = in.readInt();
|
||||||
} catch (UnknownHostException e) { }
|
} catch (UnknownHostException e) { }
|
||||||
}
|
}
|
||||||
return new LinkAddress(address, prefix);
|
return new LinkAddress(address, prefixLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LinkAddress[] newArray(int size) {
|
public LinkAddress[] newArray(int size) {
|
||||||
|
|||||||
@@ -145,6 +145,57 @@ public class NetworkUtils {
|
|||||||
return inetAddress;
|
return inetAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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.
|
* Add a default route through the specified gateway.
|
||||||
* @param interfaceName interface on which the route should be added
|
* @param interfaceName interface on which the route should be added
|
||||||
|
|||||||
Reference in New Issue
Block a user