Merge "Fix addRoute replace default route unexpectedly" am: 56d39d3251 am: c6a56b7678
Change-Id: I59759bb5241f24f5b0a3359c9c9bdb089b1b9515
This commit is contained in:
commit
c73de276e3
2 changed files with 31 additions and 27 deletions
|
|
@ -690,9 +690,9 @@ public final class LinkProperties implements Parcelable {
|
|||
route.getMtu());
|
||||
}
|
||||
|
||||
private int findRouteIndexByDestination(RouteInfo route) {
|
||||
private int findRouteIndexByRouteKey(RouteInfo route) {
|
||||
for (int i = 0; i < mRoutes.size(); i++) {
|
||||
if (mRoutes.get(i).isSameDestinationAs(route)) {
|
||||
if (mRoutes.get(i).getRouteKey().equals(route.getRouteKey())) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
|
@ -701,11 +701,11 @@ public final class LinkProperties implements Parcelable {
|
|||
|
||||
/**
|
||||
* Adds a {@link RouteInfo} to this {@code LinkProperties}, if a {@link RouteInfo}
|
||||
* with the same destination exists with different properties (e.g., different MTU),
|
||||
* it will be updated. If the {@link RouteInfo} had an interface name set and
|
||||
* that differs from the interface set for this {@code LinkProperties} an
|
||||
* {@link IllegalArgumentException} will be thrown. The proper
|
||||
* course is to add either un-named or properly named {@link RouteInfo}.
|
||||
* with the same {@link RouteInfo.RouteKey} with different properties
|
||||
* (e.g., different MTU), it will be updated. If the {@link RouteInfo} had an
|
||||
* interface name set and that differs from the interface set for this
|
||||
* {@code LinkProperties} an {@link IllegalArgumentException} will be thrown.
|
||||
* The proper course is to add either un-named or properly named {@link RouteInfo}.
|
||||
*
|
||||
* @param route A {@link RouteInfo} to add to this object.
|
||||
* @return {@code true} was added or updated, false otherwise.
|
||||
|
|
@ -719,7 +719,7 @@ public final class LinkProperties implements Parcelable {
|
|||
}
|
||||
route = routeWithInterface(route);
|
||||
|
||||
int i = findRouteIndexByDestination(route);
|
||||
int i = findRouteIndexByRouteKey(route);
|
||||
if (i == -1) {
|
||||
// Route was not present. Add it.
|
||||
mRoutes.add(route);
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import android.net.util.NetUtils;
|
|||
import android.os.Build;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.util.Pair;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
|
@ -527,23 +528,27 @@ public final class RouteInfo implements Parcelable {
|
|||
}
|
||||
|
||||
/**
|
||||
* Compares this RouteInfo object against the specified object and indicates if the
|
||||
* destinations of both routes are equal.
|
||||
* @return {@code true} if the route destinations are equal, {@code false} otherwise.
|
||||
* A helper class that contains the destination and the gateway in a {@code RouteInfo},
|
||||
* used by {@link ConnectivityService#updateRoutes} or
|
||||
* {@link LinkProperties#addRoute} to calculate the list to be updated.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public boolean isSameDestinationAs(@Nullable Object obj) {
|
||||
if (this == obj) return true;
|
||||
|
||||
if (!(obj instanceof RouteInfo)) return false;
|
||||
|
||||
RouteInfo target = (RouteInfo) obj;
|
||||
|
||||
if (Objects.equals(mDestination, target.getDestination())) {
|
||||
return true;
|
||||
public static class RouteKey extends Pair<IpPrefix, InetAddress> {
|
||||
RouteKey(@NonNull IpPrefix destination, @Nullable InetAddress gateway) {
|
||||
super(destination, gateway);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get {@code RouteKey} of this {@code RouteInfo}.
|
||||
* @return a {@code RouteKey} object.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@NonNull
|
||||
public RouteKey getRouteKey() {
|
||||
return new RouteKey(mDestination, mGateway);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue