package org.batfish.datamodel; import java.util.NavigableMap; import java.util.NavigableSet; import java.util.SortedSet; import java.util.TreeMap; import java.util.TreeSet; import org.batfish.common.util.ComparableStructure; 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 virtual routing and forwarding (VRF) instance on a node.") public class Vrf extends ComparableStructure<String> { private static final String BGP_PROCESS_VAR = "bgpProcess"; private static final String GENERATED_ROUTES_VAR = "aggregateRoutes"; private static final String INTERFACES_VAR = "interfaces"; private static final String ISIS_PROCESS_VAR = "isisProcess"; private static final String OSPF_PROCESS_VAR = "ospfProcess"; /** * */ private static final long serialVersionUID = 1L; private static final String STATIC_ROUTES_VAR = "staticRoutes"; private transient NavigableSet<BgpAdvertisement> _bgpAdvertisements; private BgpProcess _bgpProcess; private NavigableSet<GeneratedRoute6> _generatedIpv6Routes; private NavigableSet<GeneratedRoute> _generatedRoutes; private transient SortedSet<String> _interfaceNames; private NavigableMap<String, Interface> _interfaces; private IsisProcess _isisProcess; private transient NavigableSet<BgpAdvertisement> _originatedAdvertisements; private transient NavigableSet<BgpAdvertisement> _originatedEbgpAdvertisements; private transient NavigableSet<BgpAdvertisement> _originatedIbgpAdvertisements; private OspfProcess _ospfProcess; private transient NavigableSet<BgpAdvertisement> _receivedAdvertisements; private transient NavigableSet<BgpAdvertisement> _receivedEbgpAdvertisements; private transient NavigableSet<BgpAdvertisement> _receivedIbgpAdvertisements; private transient NavigableSet<Route> _routes; private transient NavigableSet<BgpAdvertisement> _sentAdvertisements; private transient NavigableSet<BgpAdvertisement> _sentEbgpAdvertisements; private transient NavigableSet<BgpAdvertisement> _sentIbgpAdvertisements; private SnmpServer _snmpServer; private NavigableSet<StaticRoute> _staticRoutes; @JsonCreator public Vrf(@JsonProperty(NAME_VAR) String name) { super(name); _generatedRoutes = new TreeSet<>(); _generatedIpv6Routes = new TreeSet<>(); _interfaces = new TreeMap<>(); _staticRoutes = new TreeSet<>(); } @JsonIgnore public NavigableSet<BgpAdvertisement> getBgpAdvertisements() { return _bgpAdvertisements; } @JsonProperty(BGP_PROCESS_VAR) @JsonPropertyDescription("BGP routing process for this VRF") public BgpProcess getBgpProcess() { return _bgpProcess; } @JsonPropertyDescription("Generated IPV6 routes for this VRF") public NavigableSet<GeneratedRoute6> getGeneratedIpv6Routes() { return _generatedIpv6Routes; } @JsonProperty(GENERATED_ROUTES_VAR) @JsonPropertyDescription("Generated IPV4 routes for this VRF") public NavigableSet<GeneratedRoute> getGeneratedRoutes() { return _generatedRoutes; } @JsonProperty(INTERFACES_VAR) @JsonPropertyDescription("Interfaces assigned to this VRF") public SortedSet<String> getInterfaceNames() { if (_interfaces != null && !_interfaces.isEmpty()) { return new TreeSet<>(_interfaces.keySet()); } else { return _interfaceNames; } } @JsonIgnore public NavigableMap<String, Interface> getInterfaces() { return _interfaces; } @JsonProperty(ISIS_PROCESS_VAR) @JsonPropertyDescription("IS-IS routing process for this VRF") public IsisProcess getIsisProcess() { return _isisProcess; } @JsonIgnore public NavigableSet<BgpAdvertisement> getOriginatedAdvertisements() { return _originatedAdvertisements; } @JsonIgnore public NavigableSet<BgpAdvertisement> getOriginatedEbgpAdvertisements() { return _originatedEbgpAdvertisements; } @JsonIgnore public NavigableSet<BgpAdvertisement> getOriginatedIbgpAdvertisements() { return _originatedIbgpAdvertisements; } @JsonPropertyDescription("OSPF routing process for this VRF") @JsonProperty(OSPF_PROCESS_VAR) public OspfProcess getOspfProcess() { return _ospfProcess; } @JsonIgnore public NavigableSet<BgpAdvertisement> getReceivedAdvertisements() { return _receivedAdvertisements; } @JsonIgnore public NavigableSet<BgpAdvertisement> getReceivedEbgpAdvertisements() { return _receivedEbgpAdvertisements; } @JsonIgnore public NavigableSet<BgpAdvertisement> getReceivedIbgpAdvertisements() { return _receivedIbgpAdvertisements; } @JsonIgnore public NavigableSet<Route> getRoutes() { return _routes; } @JsonIgnore public NavigableSet<BgpAdvertisement> getSentAdvertisements() { return _sentAdvertisements; } @JsonIgnore public NavigableSet<BgpAdvertisement> getSentEbgpAdvertisements() { return _sentEbgpAdvertisements; } @JsonIgnore public NavigableSet<BgpAdvertisement> getSentIbgpAdvertisements() { return _sentIbgpAdvertisements; } public SnmpServer getSnmpServer() { return _snmpServer; } @JsonPropertyDescription("Static routes for this VRF") @JsonProperty(STATIC_ROUTES_VAR) public NavigableSet<StaticRoute> getStaticRoutes() { return _staticRoutes; } public void initBgpAdvertisements() { _bgpAdvertisements = new TreeSet<>(); _originatedAdvertisements = new TreeSet<>(); _originatedEbgpAdvertisements = new TreeSet<>(); _originatedIbgpAdvertisements = new TreeSet<>(); _receivedAdvertisements = new TreeSet<>(); _receivedEbgpAdvertisements = new TreeSet<>(); _receivedIbgpAdvertisements = new TreeSet<>(); _sentAdvertisements = new TreeSet<>(); _sentEbgpAdvertisements = new TreeSet<>(); _sentIbgpAdvertisements = new TreeSet<>(); } public void initRoutes() { _routes = new TreeSet<>(); } public void resolveReferences(Configuration owner) { if (_interfaceNames != null) { for (String ifaceName : _interfaceNames) { _interfaces.put(ifaceName, owner.getInterfaces().get(ifaceName)); } } } @JsonProperty(BGP_PROCESS_VAR) public void setBgpProcess(BgpProcess process) { _bgpProcess = process; } public void setGeneratedIpv6Routes( NavigableSet<GeneratedRoute6> generatedIpv6Routes) { _generatedIpv6Routes = generatedIpv6Routes; } @JsonProperty(GENERATED_ROUTES_VAR) public void setGeneratedRoutes( NavigableSet<GeneratedRoute> generatedRoutes) { _generatedRoutes = generatedRoutes; } @JsonProperty(INTERFACES_VAR) public void setInterfaceNames(SortedSet<String> interfaceNames) { _interfaceNames = interfaceNames; } @JsonIgnore public void setInterfaces(NavigableMap<String, Interface> interfaces) { _interfaces = interfaces; } @JsonProperty(ISIS_PROCESS_VAR) public void setIsisProcess(IsisProcess process) { _isisProcess = process; } @JsonProperty(OSPF_PROCESS_VAR) public void setOspfProcess(OspfProcess process) { _ospfProcess = process; } public void setSnmpServer(SnmpServer snmpServer) { _snmpServer = snmpServer; } @JsonProperty(STATIC_ROUTES_VAR) public void setStaticRoutes(NavigableSet<StaticRoute> staticRoutes) { _staticRoutes = staticRoutes; } }