Minor changes to the LinkAddress API docs.
1. Rename getNetworkPrefixLength to getPrefixLength. Update all callers in frameworks/base and add a shim method and a TODO for the rest. 2. @hide isSameAddressAs. It doesn't add much, and it's just one-liner that callers can implement if they want. 3. Fix the alignment of the initial paragraph (<ul> should have been </ul>). 4. Remove the documentation that talks about creating LinkAddresses, since there's no public API for creating them. With these changes I think LinkAddress is fine as a public API. Bug: 15142362 Change-Id: Iaf3b1db577745bb68a9e1dd7f96d666dd3f3ec7c
This commit is contained in:
committed by
Robert Greenwalt
parent
887d7b1d5a
commit
b0116bf5bf
@@ -39,18 +39,13 @@ import static android.system.OsConstants.RT_SCOPE_UNIVERSE;
|
|||||||
* <ul>
|
* <ul>
|
||||||
* <li>An IP address and prefix length (e.g., {@code 2001:db8::1/64} or {@code 192.0.2.1/24}).
|
* <li>An IP address and prefix length (e.g., {@code 2001:db8::1/64} or {@code 192.0.2.1/24}).
|
||||||
* The address must be unicast, as multicast addresses cannot be assigned to interfaces.
|
* The address must be unicast, as multicast addresses cannot be assigned to interfaces.
|
||||||
* <li>Address flags: A bitmask of {@code IFA_F_*} values representing properties
|
* <li>Address flags: A bitmask of {@code OsConstants.IFA_F_*} values representing properties
|
||||||
* of the address.
|
* of the address (e.g., {@code android.system.OsConstants.IFA_F_OPTIMISTIC}).
|
||||||
* <li>Address scope: An integer defining the scope in which the address is unique (e.g.,
|
* <li>Address scope: One of the {@code OsConstants.IFA_F_*} values; defines the scope in which
|
||||||
* {@code RT_SCOPE_LINK} or {@code RT_SCOPE_SITE}).
|
* the address is unique (e.g.,
|
||||||
* <ul>
|
* {@code android.system.OsConstants.RT_SCOPE_LINK} or
|
||||||
*<p>
|
* {@code android.system.OsConstants.RT_SCOPE_UNIVERSE}).
|
||||||
* When constructing a {@code LinkAddress}, the IP address and prefix are required. The flags and
|
* </ul>
|
||||||
* scope are optional. If they are not specified, the flags are set to zero, and the scope will be
|
|
||||||
* determined based on the IP address (e.g., link-local addresses will be created with a scope of
|
|
||||||
* {@code RT_SCOPE_LINK}, global addresses with {@code RT_SCOPE_UNIVERSE},
|
|
||||||
* etc.) If they are specified, they are not checked for validity.
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class LinkAddress implements Parcelable {
|
public class LinkAddress implements Parcelable {
|
||||||
/**
|
/**
|
||||||
@@ -202,7 +197,9 @@ public class LinkAddress implements Parcelable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Compares this {@code LinkAddress} instance against {@code obj}. Two addresses are equal if
|
* Compares this {@code LinkAddress} instance against {@code obj}. Two addresses are equal if
|
||||||
* their address, prefix length, flags and scope are equal.
|
* their address, prefix length, flags and scope are equal. Thus, for example, two addresses
|
||||||
|
* that have the same address and prefix length are not equal if one of them is deprecated and
|
||||||
|
* the other is not.
|
||||||
*
|
*
|
||||||
* @param obj the object to be tested for equality.
|
* @param obj the object to be tested for equality.
|
||||||
* @return {@code true} if both objects are equal, {@code false} otherwise.
|
* @return {@code true} if both objects are equal, {@code false} otherwise.
|
||||||
@@ -236,6 +233,7 @@ public class LinkAddress implements Parcelable {
|
|||||||
* @param other the {@code LinkAddress} to compare to.
|
* @param other the {@code LinkAddress} to compare to.
|
||||||
* @return {@code true} if both objects have the same address and prefix length, {@code false}
|
* @return {@code true} if both objects have the same address and prefix length, {@code false}
|
||||||
* otherwise.
|
* otherwise.
|
||||||
|
* @hide
|
||||||
*/
|
*/
|
||||||
public boolean isSameAddressAs(LinkAddress other) {
|
public boolean isSameAddressAs(LinkAddress other) {
|
||||||
return address.equals(other.address) && prefixLength == other.prefixLength;
|
return address.equals(other.address) && prefixLength == other.prefixLength;
|
||||||
@@ -251,10 +249,19 @@ public class LinkAddress implements Parcelable {
|
|||||||
/**
|
/**
|
||||||
* Returns the prefix length of this {@code LinkAddress}.
|
* Returns the prefix length of this {@code LinkAddress}.
|
||||||
*/
|
*/
|
||||||
public int getNetworkPrefixLength() {
|
public int getPrefixLength() {
|
||||||
return prefixLength;
|
return prefixLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the prefix length of this {@code LinkAddress}.
|
||||||
|
* TODO: Delete all callers and remove in favour of getPrefixLength().
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public int getNetworkPrefixLength() {
|
||||||
|
return getPrefixLength();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the flags of this {@code LinkAddress}.
|
* Returns the flags of this {@code LinkAddress}.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ public class RouteInfo implements Parcelable {
|
|||||||
mHasGateway = (!gateway.isAnyLocalAddress());
|
mHasGateway = (!gateway.isAnyLocalAddress());
|
||||||
|
|
||||||
mDestination = new LinkAddress(NetworkUtils.getNetworkPart(destination.getAddress(),
|
mDestination = new LinkAddress(NetworkUtils.getNetworkPart(destination.getAddress(),
|
||||||
destination.getNetworkPrefixLength()), destination.getNetworkPrefixLength());
|
destination.getPrefixLength()), destination.getPrefixLength());
|
||||||
if ((destination.getAddress() instanceof Inet4Address &&
|
if ((destination.getAddress() instanceof Inet4Address &&
|
||||||
(gateway instanceof Inet4Address == false)) ||
|
(gateway instanceof Inet4Address == false)) ||
|
||||||
(destination.getAddress() instanceof Inet6Address &&
|
(destination.getAddress() instanceof Inet6Address &&
|
||||||
@@ -210,18 +210,18 @@ public class RouteInfo implements Parcelable {
|
|||||||
|
|
||||||
private boolean isHost() {
|
private boolean isHost() {
|
||||||
return (mDestination.getAddress() instanceof Inet4Address &&
|
return (mDestination.getAddress() instanceof Inet4Address &&
|
||||||
mDestination.getNetworkPrefixLength() == 32) ||
|
mDestination.getPrefixLength() == 32) ||
|
||||||
(mDestination.getAddress() instanceof Inet6Address &&
|
(mDestination.getAddress() instanceof Inet6Address &&
|
||||||
mDestination.getNetworkPrefixLength() == 128);
|
mDestination.getPrefixLength() == 128);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isDefault() {
|
private boolean isDefault() {
|
||||||
boolean val = false;
|
boolean val = false;
|
||||||
if (mGateway != null) {
|
if (mGateway != null) {
|
||||||
if (mGateway instanceof Inet4Address) {
|
if (mGateway instanceof Inet4Address) {
|
||||||
val = (mDestination == null || mDestination.getNetworkPrefixLength() == 0);
|
val = (mDestination == null || mDestination.getPrefixLength() == 0);
|
||||||
} else {
|
} else {
|
||||||
val = (mDestination == null || mDestination.getNetworkPrefixLength() == 0);
|
val = (mDestination == null || mDestination.getPrefixLength() == 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return val;
|
return val;
|
||||||
@@ -306,7 +306,7 @@ public class RouteInfo implements Parcelable {
|
|||||||
|
|
||||||
// match the route destination and destination with prefix length
|
// match the route destination and destination with prefix length
|
||||||
InetAddress dstNet = NetworkUtils.getNetworkPart(destination,
|
InetAddress dstNet = NetworkUtils.getNetworkPart(destination,
|
||||||
mDestination.getNetworkPrefixLength());
|
mDestination.getPrefixLength());
|
||||||
|
|
||||||
return mDestination.getAddress().equals(dstNet);
|
return mDestination.getAddress().equals(dstNet);
|
||||||
}
|
}
|
||||||
@@ -328,8 +328,8 @@ public class RouteInfo implements Parcelable {
|
|||||||
for (RouteInfo route : routes) {
|
for (RouteInfo route : routes) {
|
||||||
if (NetworkUtils.addressTypeMatches(route.mDestination.getAddress(), dest)) {
|
if (NetworkUtils.addressTypeMatches(route.mDestination.getAddress(), dest)) {
|
||||||
if ((bestRoute != null) &&
|
if ((bestRoute != null) &&
|
||||||
(bestRoute.mDestination.getNetworkPrefixLength() >=
|
(bestRoute.mDestination.getPrefixLength() >=
|
||||||
route.mDestination.getNetworkPrefixLength())) {
|
route.mDestination.getPrefixLength())) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (route.matches(dest)) bestRoute = route;
|
if (route.matches(dest)) bestRoute = route;
|
||||||
@@ -394,7 +394,7 @@ public class RouteInfo implements Parcelable {
|
|||||||
} else {
|
} else {
|
||||||
dest.writeByte((byte) 1);
|
dest.writeByte((byte) 1);
|
||||||
dest.writeByteArray(mDestination.getAddress().getAddress());
|
dest.writeByteArray(mDestination.getAddress().getAddress());
|
||||||
dest.writeInt(mDestination.getNetworkPrefixLength());
|
dest.writeInt(mDestination.getPrefixLength());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mGateway == null) {
|
if (mGateway == null) {
|
||||||
|
|||||||
@@ -56,26 +56,26 @@ public class LinkAddressTest extends AndroidTestCase {
|
|||||||
// Valid addresses work as expected.
|
// Valid addresses work as expected.
|
||||||
address = new LinkAddress(V4_ADDRESS, 25);
|
address = new LinkAddress(V4_ADDRESS, 25);
|
||||||
assertEquals(V4_ADDRESS, address.getAddress());
|
assertEquals(V4_ADDRESS, address.getAddress());
|
||||||
assertEquals(25, address.getNetworkPrefixLength());
|
assertEquals(25, address.getPrefixLength());
|
||||||
assertEquals(0, address.getFlags());
|
assertEquals(0, address.getFlags());
|
||||||
assertEquals(RT_SCOPE_UNIVERSE, address.getScope());
|
assertEquals(RT_SCOPE_UNIVERSE, address.getScope());
|
||||||
|
|
||||||
address = new LinkAddress(V6_ADDRESS, 127);
|
address = new LinkAddress(V6_ADDRESS, 127);
|
||||||
assertEquals(V6_ADDRESS, address.getAddress());
|
assertEquals(V6_ADDRESS, address.getAddress());
|
||||||
assertEquals(127, address.getNetworkPrefixLength());
|
assertEquals(127, address.getPrefixLength());
|
||||||
assertEquals(0, address.getFlags());
|
assertEquals(0, address.getFlags());
|
||||||
assertEquals(RT_SCOPE_UNIVERSE, address.getScope());
|
assertEquals(RT_SCOPE_UNIVERSE, address.getScope());
|
||||||
|
|
||||||
// Nonsensical flags/scopes or combinations thereof are acceptable.
|
// Nonsensical flags/scopes or combinations thereof are acceptable.
|
||||||
address = new LinkAddress(V6 + "/64", IFA_F_DEPRECATED | IFA_F_PERMANENT, RT_SCOPE_LINK);
|
address = new LinkAddress(V6 + "/64", IFA_F_DEPRECATED | IFA_F_PERMANENT, RT_SCOPE_LINK);
|
||||||
assertEquals(V6_ADDRESS, address.getAddress());
|
assertEquals(V6_ADDRESS, address.getAddress());
|
||||||
assertEquals(64, address.getNetworkPrefixLength());
|
assertEquals(64, address.getPrefixLength());
|
||||||
assertEquals(IFA_F_DEPRECATED | IFA_F_PERMANENT, address.getFlags());
|
assertEquals(IFA_F_DEPRECATED | IFA_F_PERMANENT, address.getFlags());
|
||||||
assertEquals(RT_SCOPE_LINK, address.getScope());
|
assertEquals(RT_SCOPE_LINK, address.getScope());
|
||||||
|
|
||||||
address = new LinkAddress(V4 + "/23", 123, 456);
|
address = new LinkAddress(V4 + "/23", 123, 456);
|
||||||
assertEquals(V4_ADDRESS, address.getAddress());
|
assertEquals(V4_ADDRESS, address.getAddress());
|
||||||
assertEquals(23, address.getNetworkPrefixLength());
|
assertEquals(23, address.getPrefixLength());
|
||||||
assertEquals(123, address.getFlags());
|
assertEquals(123, address.getFlags());
|
||||||
assertEquals(456, address.getScope());
|
assertEquals(456, address.getScope());
|
||||||
|
|
||||||
@@ -94,10 +94,10 @@ public class LinkAddressTest extends AndroidTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
assertEquals(NetworkUtils.numericToInetAddress("127.0.0.1"), ipv4Loopback.getAddress());
|
assertEquals(NetworkUtils.numericToInetAddress("127.0.0.1"), ipv4Loopback.getAddress());
|
||||||
assertEquals(8, ipv4Loopback.getNetworkPrefixLength());
|
assertEquals(8, ipv4Loopback.getPrefixLength());
|
||||||
|
|
||||||
assertEquals(NetworkUtils.numericToInetAddress("::1"), ipv6Loopback.getAddress());
|
assertEquals(NetworkUtils.numericToInetAddress("::1"), ipv6Loopback.getAddress());
|
||||||
assertEquals(128, ipv6Loopback.getNetworkPrefixLength());
|
assertEquals(128, ipv6Loopback.getPrefixLength());
|
||||||
|
|
||||||
// Null addresses are rejected.
|
// Null addresses are rejected.
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1669,7 +1669,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
int prefix = destination.getNetworkPrefixLength();
|
int prefix = destination.getPrefixLength();
|
||||||
InetAddress addrMasked = NetworkUtils.getNetworkPart(address, prefix);
|
InetAddress addrMasked = NetworkUtils.getNetworkPart(address, prefix);
|
||||||
InetAddress destMasked = NetworkUtils.getNetworkPart(destination.getAddress(),
|
InetAddress destMasked = NetworkUtils.getNetworkPart(destination.getAddress(),
|
||||||
prefix);
|
prefix);
|
||||||
|
|||||||
Reference in New Issue
Block a user