package org.batfish.datamodel.routing_policy.expr; import org.batfish.datamodel.AsPath; import org.batfish.datamodel.AsPathAccessList; import org.batfish.datamodel.BgpRoute; import org.batfish.datamodel.routing_policy.Environment; import com.fasterxml.jackson.annotation.JsonCreator; public class NamedAsPathSet extends AsPathSetExpr { /** * */ private static final long serialVersionUID = 1L; private String _name; @JsonCreator private NamedAsPathSet() { } public NamedAsPathSet(String name) { _name = name; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } NamedAsPathSet other = (NamedAsPathSet) obj; if (_name == null) { if (other._name != null) { return false; } } else if (!_name.equals(other._name)) { return false; } return true; } public String getName() { return _name; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((_name == null) ? 0 : _name.hashCode()); return result; } @Override public boolean matches(Environment environment) { AsPathAccessList list = environment.getConfiguration() .getAsPathAccessLists().get(_name); if (list != null) { boolean match = false; AsPath inputAsPath = null; if (environment.getUseOutputAttributes() && environment.getOutputRoute() instanceof BgpRoute.Builder) { BgpRoute.Builder bgpRouteBuilder = (BgpRoute.Builder) environment .getOutputRoute(); inputAsPath = bgpRouteBuilder.getAsPath(); } else if (environment.getReadFromIntermediateBgpAttributes()) { inputAsPath = environment.getIntermediateBgpAttributes() .getAsPath(); } else if (environment.getOriginalRoute() instanceof BgpRoute) { BgpRoute bgpRoute = (BgpRoute) environment.getOriginalRoute(); inputAsPath = bgpRoute.getAsPath(); } if (inputAsPath != null) { match = list.permits(inputAsPath); } return match; } else { environment.setError(true); return false; } } public void setName(String name) { _name = name; } }