package org.batfish.representation.juniper;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import org.batfish.common.util.ComparableStructure;
import org.batfish.datamodel.Ip;
import org.batfish.datamodel.IsoAddress;
import org.batfish.datamodel.Prefix;
import org.batfish.datamodel.SubRange;
import org.batfish.datamodel.SwitchportEncapsulationType;
import org.batfish.datamodel.SwitchportMode;
import org.batfish.datamodel.VrrpGroup;
public class Interface extends ComparableStructure<String> {
private static final long serialVersionUID = 1L;
public static double getDefaultBandwidthByName(String name) {
if (name.startsWith("xe")) {
return 1E10;
}
else if (name.startsWith("ge")) {
return 1E9;
}
else if (name.startsWith("fe")) {
return 1E8;
}
else {
return 1E12;
}
}
private int _accessVlan;
private boolean _active;
private final ArrayList<SubRange> _allowedVlans;
private final Set<Prefix> _allPrefixes;
private final Set<Ip> _allPrefixIps;
private double _bandwidth;
private final int _definitionLine;
private String _incomingFilter;
private int _incomingFilterLine;
private transient boolean _inherited;
private final IsisInterfaceSettings _isisSettings;
private IsoAddress _isoAddress;
private Integer _mtu;
private int _nativeVlan;
private Ip _ospfActiveArea;
private Integer _ospfCost;
private int _ospfDeadInterval;
private int _ospfHelloMultiplier;
private final Set<Ip> _ospfPassiveAreas;
private String _outgoingFilter;
private int _outgoingFilterLine;
private Interface _parent;
private Prefix _preferredPrefix;
private Prefix _primaryPrefix;
private String _routingInstance;
private SwitchportMode _switchportMode;
private SwitchportEncapsulationType _switchportTrunkEncapsulation;
private final SortedMap<String, Interface> _units;
private final SortedMap<Integer, VrrpGroup> _vrrpGroups;
@SuppressWarnings("unused")
private Interface() {
this(null, -1);
}
public Interface(String name, int definitionLine) {
super(name);
_active = true;
_allPrefixes = new LinkedHashSet<>();
_allPrefixIps = new LinkedHashSet<>();
_bandwidth = getDefaultBandwidthByName(name);
_definitionLine = definitionLine;
_isisSettings = new IsisInterfaceSettings();
_nativeVlan = 1;
_switchportMode = SwitchportMode.NONE;
_switchportTrunkEncapsulation = SwitchportEncapsulationType.DOT1Q;
_allowedVlans = new ArrayList<>();
_ospfCost = null;
_ospfPassiveAreas = new HashSet<>();
_units = new TreeMap<>();
_vrrpGroups = new TreeMap<>();
}
public void addAllowedRanges(List<SubRange> ranges) {
_allowedVlans.addAll(ranges);
}
public int getAccessVlan() {
return _accessVlan;
}
public boolean getActive() {
return _active;
}
public List<SubRange> getAllowedVlans() {
return _allowedVlans;
}
public Set<Prefix> getAllPrefixes() {
return _allPrefixes;
}
public Set<Ip> getAllPrefixIps() {
return _allPrefixIps;
}
public double getBandwidth() {
return _bandwidth;
}
public int getDefinitionLine() {
return _definitionLine;
}
public String getIncomingFilter() {
return _incomingFilter;
}
public int getIncomingFilterLine() {
return _incomingFilterLine;
}
public IsisInterfaceSettings getIsisSettings() {
return _isisSettings;
}
public IsoAddress getIsoAddress() {
return _isoAddress;
}
public Integer getMtu() {
return _mtu;
}
public int getNativeVlan() {
return _nativeVlan;
}
public Ip getOspfActiveArea() {
return _ospfActiveArea;
}
public Integer getOspfCost() {
return _ospfCost;
}
public int getOspfDeadInterval() {
return _ospfDeadInterval;
}
public int getOspfHelloMultiplier() {
return _ospfHelloMultiplier;
}
public Set<Ip> getOspfPassiveAreas() {
return _ospfPassiveAreas;
}
public String getOutgoingFilter() {
return _outgoingFilter;
}
public int getOutgoingFilterLine() {
return _outgoingFilterLine;
}
public Interface getParent() {
return _parent;
}
public Prefix getPreferredPrefix() {
return _preferredPrefix;
}
public Prefix getPrimaryPrefix() {
return _primaryPrefix;
}
public String getRoutingInstance() {
return _routingInstance;
}
public SwitchportMode getSwitchportMode() {
return _switchportMode;
}
public SwitchportEncapsulationType getSwitchportTrunkEncapsulation() {
return _switchportTrunkEncapsulation;
}
public Map<String, Interface> getUnits() {
return _units;
}
public SortedMap<Integer, VrrpGroup> getVrrpGroups() {
return _vrrpGroups;
}
public void inheritUnsetFields() {
if (_parent != null) {
if (!_inherited) {
_inherited = true;
_parent.inheritUnsetFields();
if (_mtu == null) {
_mtu = _parent._mtu;
}
}
}
}
public void setAccessVlan(int vlan) {
_accessVlan = vlan;
}
public void setActive(boolean active) {
_active = active;
}
public void setBandwidth(Double bandwidth) {
_bandwidth = bandwidth;
}
public void setIncomingFilter(String accessListName) {
_incomingFilter = accessListName;
}
public void setIncomingFilterLine(int incomingFilterLine) {
_incomingFilterLine = incomingFilterLine;
}
public void setIsoAddress(IsoAddress address) {
_isoAddress = address;
}
public void setMtu(Integer mtu) {
_mtu = mtu;
}
public void setNativeVlan(int vlan) {
_nativeVlan = vlan;
}
public void setOspfActiveArea(Ip ospfActiveArea) {
_ospfActiveArea = ospfActiveArea;
}
public void setOspfCost(int defaultOspfCost) {
_ospfCost = defaultOspfCost;
}
public void setOspfDeadInterval(int seconds) {
_ospfDeadInterval = seconds;
}
public void setOspfHelloMultiplier(int multiplier) {
_ospfHelloMultiplier = multiplier;
}
public void setOutgoingFilter(String accessListName) {
_outgoingFilter = accessListName;
}
public void setOutgoingFilterLine(int outgoingFilterLine) {
_outgoingFilterLine = outgoingFilterLine;
}
public void setParent(Interface parent) {
_parent = parent;
}
public void setPreferredPrefix(Prefix prefix) {
_preferredPrefix = prefix;
}
public void setPrimaryPrefix(Prefix prefix) {
_primaryPrefix = prefix;
}
public void setRoutingInstance(String routingInstance) {
_routingInstance = routingInstance;
}
public void setSwitchportMode(SwitchportMode switchportMode) {
_switchportMode = switchportMode;
}
public void setSwitchportTrunkEncapsulation(
SwitchportEncapsulationType encapsulation) {
_switchportTrunkEncapsulation = encapsulation;
}
}