@Override public AclLineMatchExpr visitPermittedByAcl(PermittedByAcl permittedByAcl) { return _namedAclThunks.get(permittedByAcl.getAclName()).get(); }
@Override protected String featureValueOf(PermittedByAcl actual) { return actual.getAclName(); } }
@Override public BDD visitPermittedByAcl(PermittedByAcl permittedByAcl) { String name = permittedByAcl.getAclName(); checkArgument(_aclEnv.containsKey(name), "Undefined PermittedByAcl reference: %s", name); try { return _aclEnv.get(name).get(); } catch (NonRecursiveSupplierException e) { throw new BatfishException("Circular PermittedByAcl reference: " + name); } }
@Override public Void visitPermittedByAcl(PermittedByAcl permittedByAcl) { String aclName = permittedByAcl.getAclName(); Supplier<Void> thunk = _namedAclThunks.get(aclName); if (thunk == null) { throw new BatfishException("Unknown IpAccessList " + aclName); } return thunk.get(); }
@Override public Boolean visitPermittedByAcl(PermittedByAcl permittedByAcl) { return dependsOnSourceInterface(_ipAccessLists.get(permittedByAcl.getAclName())); }
@Override public Boolean visitPermittedByAcl(PermittedByAcl permittedByAcl) { return trace(_availableAcls.get(permittedByAcl.getAclName())); }
@Override public AclLineMatchExpr visitPermittedByAcl(PermittedByAcl permittedByAcl) { PermittedByAcl newPermittedByAcl = new PermittedByAcl( _aclRenamer.apply(permittedByAcl.getAclName()), permittedByAcl.getDefaultAccept(), permittedByAcl.getDescription()); _literalsMap.put(permittedByAcl, newPermittedByAcl); return newPermittedByAcl; }
@Override public Boolean visitPermittedByAcl(PermittedByAcl permittedByAcl) { return _availableAcls .get(permittedByAcl.getAclName()) .filter( _flow, _srcInterface, _availableAcls, _namedIpSpaces, permittedByAcl.getDefaultAccept() ? LineAction.PERMIT : LineAction.DENY) .getAction() == LineAction.PERMIT; }
@Override public BooleanExpr visitPermittedByAcl(PermittedByAcl permittedByAcl) { IpAccessList acl = _nodeAcls.get(permittedByAcl.getAclName()); // Right fold. Base case (when no line matches) is not permitted. BooleanExpr expr = org.batfish.z3.expr.FalseExpr.INSTANCE; ListIterator<IpAccessListLine> iter = acl.getLines().listIterator(acl.getLines().size()); while (iter.hasPrevious()) { IpAccessListLine line = iter.previous(); BooleanExpr matched = toBooleanExpr(line.getMatchCondition()); BooleanExpr permitted = line.getAction() == LineAction.PERMIT ? org.batfish.z3.expr.TrueExpr.INSTANCE : org.batfish.z3.expr.FalseExpr.INSTANCE; expr = new IfThenElse(matched, permitted, expr); } return expr; }