package org.batfish.datamodel; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyDescription; import com.kjetland.jackson.jsonSchema.annotations.JsonSchemaDescription; @JsonSchemaDescription("A generated/aggregate IPV4 route.") public final class GeneratedRoute extends AbstractRoute implements Comparable<GeneratedRoute> { public static class Builder extends AbstractRouteBuilder<GeneratedRoute> { private AsPath _asPath; private String _attributePolicy; private boolean _discard; private String _generationPolicy; private String _nextHopInterface; public Builder() { _asPath = new AsPath(); } @Override public GeneratedRoute build() { GeneratedRoute gr = new GeneratedRoute(_network, _nextHopIp); gr.setAdministrativePreference(_admin); gr.setMetric(_metric); gr.setGenerationPolicy(_generationPolicy); gr.setAttributePolicy(_attributePolicy); gr.setDiscard(_discard); gr.setAsPath(_asPath); gr.setNextHopInterface(_nextHopInterface); return gr; } public void setAsPath(AsPath asPath) { _asPath = asPath; } public void setAttributePolicy(String attributePolicy) { _attributePolicy = attributePolicy; } public void setDiscard(boolean discard) { _discard = discard; } public void setGenerationPolicy(String generationPolicy) { _generationPolicy = generationPolicy; } public void setNextHopInterface(String nextHopInterface) { _nextHopInterface = nextHopInterface; } } private static final String AS_PATH_VAR = "asPath"; private static final String DISCARD_VAR = "discard"; private static final String METRIC_VAR = "metric"; private static final long serialVersionUID = 1L; private int _administrativeCost; private AsPath _asPath; private String _attributePolicy; private boolean _discard; private String _generationPolicy; private Integer _metric; private String _nextHopInterface; @JsonCreator public GeneratedRoute(@JsonProperty(NETWORK_VAR) Prefix prefix) { super(prefix, null); } public GeneratedRoute(Prefix prefix, int administrativeCost) { super(prefix, null); _administrativeCost = administrativeCost; } public GeneratedRoute(Prefix prefix, Ip nextHopIp) { super(prefix, nextHopIp); } @Override public int compareTo(GeneratedRoute o) { return _network.compareTo(o._network); } @Override public boolean equals(Object o) { GeneratedRoute rhs = (GeneratedRoute) o; return _network.equals(rhs._network); } @Override public int getAdministrativeCost() { return _administrativeCost; } @JsonProperty(AS_PATH_VAR) @JsonPropertyDescription("A BGP AS-path attribute to associate with this generated route") public AsPath getAsPath() { return _asPath; } @JsonPropertyDescription("The name of the policy that sets attributes of this route") public String getAttributePolicy() { return _attributePolicy; } @JsonProperty(DISCARD_VAR) @JsonPropertyDescription("Whether this route is route is meant to discard all matching packets") public boolean getDiscard() { return _discard; } @JsonPropertyDescription("The name of the policy that will generate this route if another route matches it") public String getGenerationPolicy() { return _generationPolicy; } @JsonProperty(METRIC_VAR) @Override public Integer getMetric() { return _metric; } @Override public String getNextHopInterface() { return _nextHopInterface; } @Override @JsonIgnore public Ip getNextHopIp() { return super.getNextHopIp(); } @Override public RoutingProtocol getProtocol() { return RoutingProtocol.AGGREGATE; } @Override @JsonIgnore public int getTag() { return NO_TAG; } @Override public int hashCode() { return _network.hashCode(); } @JsonProperty(ADMINISTRATIVE_COST_VAR) public void setAdministrativePreference(int preference) { _administrativeCost = preference; } @JsonProperty(AS_PATH_VAR) public void setAsPath(AsPath asPath) { _asPath = asPath; } public void setAttributePolicy(String attributePolicy) { _attributePolicy = attributePolicy; } @JsonProperty(DISCARD_VAR) public void setDiscard(boolean discard) { _discard = discard; } public void setGenerationPolicy(String generationPolicy) { _generationPolicy = generationPolicy; } @JsonProperty(METRIC_VAR) public void setMetric(int metric) { _metric = metric; } public void setNextHopInterface(String nextHopInterface) { _nextHopInterface = nextHopInterface; } }