package org.batfish.representation.cisco; import java.util.List; import java.util.Set; import org.batfish.datamodel.Configuration; import org.batfish.datamodel.Ip6AccessList; import org.batfish.datamodel.Route6FilterList; import org.batfish.datamodel.routing_policy.expr.BooleanExpr; import org.batfish.datamodel.routing_policy.expr.DestinationNetwork6; import org.batfish.datamodel.routing_policy.expr.Disjunction; import org.batfish.datamodel.routing_policy.expr.MatchIp6AccessList; import org.batfish.datamodel.routing_policy.expr.MatchPrefix6Set; import org.batfish.datamodel.routing_policy.expr.NamedPrefix6Set; import org.batfish.common.Warnings; public class RouteMapMatchIpv6AccessListLine extends RouteMapMatchLine { private static final long serialVersionUID = 1L; private final Set<String> _listNames; private boolean _routing; private final int _statementLine; public RouteMapMatchIpv6AccessListLine(Set<String> names, int statementLine) { _listNames = names; _statementLine = statementLine; } public Set<String> getListNames() { return _listNames; } public boolean getRouting() { return _routing; } public void setRouting(boolean routing) { _routing = routing; } @Override public BooleanExpr toBooleanExpr(Configuration c, CiscoConfiguration cc, Warnings w) { Disjunction d = new Disjunction(); List<BooleanExpr> disjuncts = d.getDisjuncts(); for (String listName : _listNames) { Object list; Ip6AccessList ipAccessList = null; Route6FilterList routeFilterList = null; if (_routing) { routeFilterList = c.getRoute6FilterLists().get(listName); list = routeFilterList; } else { ipAccessList = c.getIp6AccessLists().get(listName); list = ipAccessList; } if (list == null) { cc.undefined(CiscoStructureType.IPV6_ACCESS_LIST, listName, CiscoStructureUsage.ROUTE_MAP_MATCH_IPV6_ACCESS_LIST, _statementLine); } else { String msg = "route-map match ipv6 access-list line"; ExtendedIpv6AccessList extendedAccessList = cc.getExtendedIpv6Acls() .get(listName); if (extendedAccessList != null) { extendedAccessList.getReferers().put(this, msg); } StandardIpv6AccessList standardAccessList = cc.getStandardIpv6Acls() .get(listName); if (standardAccessList != null) { standardAccessList.getReferers().put(this, msg); } if (_routing) { disjuncts.add(new MatchPrefix6Set(new DestinationNetwork6(), new NamedPrefix6Set(listName))); } else { disjuncts.add(new MatchIp6AccessList(listName)); } } } return d.simplify(); } }