package org.batfish.datamodel;
import java.io.Serializable;
import org.batfish.common.BatfishException;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "class")
public abstract class AbstractRoute implements Serializable {
protected static final String ADMINISTRATIVE_COST_VAR = "administrativeCost";
private static final String METRIC_VAR = "metric";
protected static final String NETWORK_VAR = "network";
protected static final String NEXT_HOP_IP_VAR = "nextHopIp";
public static final int NO_TAG = -1;
private static final long serialVersionUID = 1L;
protected final Prefix _network;
protected final Ip _nextHopIp;
private boolean _nonRouting;
public AbstractRoute(Prefix network, Ip nextHopIp) {
if (network == null) {
throw new BatfishException(
"Cannot construct AbstractRoute with null network");
}
_network = network;
_nextHopIp = nextHopIp;
}
@Override
public abstract boolean equals(Object o);
@JsonProperty(ADMINISTRATIVE_COST_VAR)
@JsonPropertyDescription("Administrative cost for this route (usually based on protocol)")
public abstract int getAdministrativeCost();
@JsonProperty(METRIC_VAR)
@JsonPropertyDescription("Protocol-specific cost for this route")
public abstract Integer getMetric();
@JsonProperty(NETWORK_VAR)
@JsonPropertyDescription("IPV4 network of this route")
public final Prefix getNetwork() {
return _network;
}
@JsonPropertyDescription("The explicit next-hop interface for this route")
public abstract String getNextHopInterface();
@JsonProperty(NEXT_HOP_IP_VAR)
@JsonPropertyDescription("The IPV4 address of the next-hop router for this route")
public Ip getNextHopIp() {
return _nextHopIp;
}
@JsonIgnore
public final boolean getNonRouting() {
return _nonRouting;
}
@JsonIgnore
@JsonPropertyDescription("The routing protocol that produced this route")
public abstract RoutingProtocol getProtocol();
@JsonPropertyDescription("The non-transitive tag attribute of this route")
public abstract int getTag();
@Override
public abstract int hashCode();
@JsonIgnore
public final void setNonRouting(boolean nonRouting) {
_nonRouting = nonRouting;
}
@Override
public String toString() {
return this.getClass().getSimpleName() + "<" + _network.toString() + ">";
}
}