@Override public BooleanExpr toBooleanExpr(CiscoConfiguration cc, Configuration c, Warnings w) { return new CallExpr(_name); } }
@Override public Set<String> collectSources( Set<String> parentSources, Map<String, RoutingPolicy> routingPolicies, Warnings w) { if (parentSources.contains(_calledPolicyName)) { w.redFlag( "Circular reference to routing policy: '" + _calledPolicyName + "' detected at expression: '" + toString() + "'"); return Collections.emptySet(); } RoutingPolicy calledPolicy = routingPolicies.get(_calledPolicyName); if (calledPolicy == null) { return Collections.emptySet(); } return calledPolicy.computeSources(parentSources, routingPolicies, w); }
@Override public String toString() { return toStringHelper().add(PROP_CALLED_POLICY_NAME, _calledPolicyName).toString(); } }
@Override public Result evaluate(Environment environment) { Result subroutineResult = new Result(); // By default move on to the next policy subroutineResult.setFallThrough(true); for (BooleanExpr subroutine : _subroutines) { subroutineResult = subroutine.evaluate(environment); if (subroutineResult.getExit()) { // Reached an exit/terminal action. Return regardless of boolean value return subroutineResult; } else if (!subroutineResult.getFallThrough() && !subroutineResult.getBooleanValue()) { // Found first match that returns false, short-circuit here subroutineResult.setReturn(false); return subroutineResult; } } // Check if we are allowed to fall through to the default policy, if not, return last result if (!subroutineResult.getFallThrough()) { return subroutineResult; } else { String defaultPolicy = environment.getDefaultPolicy(); if (defaultPolicy != null) { CallExpr callDefaultPolicy = new CallExpr(environment.getDefaultPolicy()); return callDefaultPolicy.evaluate(environment); } else { throw new BatfishException("Default policy is not set"); } } }
List<BooleanExpr> conjuncts = new ArrayList<>(d.getSubroutines()); if (pCur.getDefaultPolicy() != null) { BooleanExpr be = new CallExpr(pCur.getDefaultPolicy().getDefaultPolicy()); conjuncts.add(be); List<BooleanExpr> disjuncts = new ArrayList<>(d.getSubroutines()); if (pCur.getDefaultPolicy() != null) { BooleanExpr be = new CallExpr(pCur.getDefaultPolicy().getDefaultPolicy()); disjuncts.add(be); String name = c.getCalledPolicyName(); RoutingPolicy pol = _conf.getRoutingPolicies().get(name); pCur = pCur.setCallContext(TransferParam.CallContext.EXPR_CALL);
return ce.getCalledPolicyName().contains(Graph.BGP_COMMON_FILTER_LIST_NAME);
@Override public Result evaluate(Environment environment) { Result subroutineResult = new Result(); // By default move on to the next policy subroutineResult.setFallThrough(true); for (BooleanExpr subroutine : _subroutines) { subroutineResult = subroutine.evaluate(environment); if (subroutineResult.getExit()) { // Reached an exit/terminal action. Return regardless of boolean value return subroutineResult; } else if (!subroutineResult.getFallThrough() && subroutineResult.getBooleanValue()) { // Matched the route, first match that returns true lets us short-circuit subroutineResult.setReturn(true); return subroutineResult; } } // Check if we are allowed to fall through to the default policy, if not, return last result if (!subroutineResult.getFallThrough()) { return subroutineResult; } else { String defaultPolicy = environment.getDefaultPolicy(); if (defaultPolicy != null) { CallExpr callDefaultPolicy = new CallExpr(environment.getDefaultPolicy()); return callDefaultPolicy.evaluate(environment); } else { throw new BatfishException("Default policy is not set"); } } }
List<BooleanExpr> conjuncts = new ArrayList<>(d.getSubroutines()); if (p.getDefaultPolicy() != null) { BooleanExpr be = new CallExpr(p.getDefaultPolicy().getDefaultPolicy()); conjuncts.add(be); List<BooleanExpr> disjuncts = new ArrayList<>(d.getSubroutines()); if (p.getDefaultPolicy() != null) { BooleanExpr be = new CallExpr(p.getDefaultPolicy().getDefaultPolicy()); disjuncts.add(be); CallExpr c = (CallExpr) expr; String router = _conf.getHostname(); String name = c.getCalledPolicyName(); TransferResult<TransferReturn, BDD> r = CACHE.get(router, name); if (r != null) {
RoutingPolicy rp = conf.getRoutingPolicies().get(c.getCalledPolicyName()); visit(conf, rp.getStatements(), fs, fe);
@Override public BooleanExpr toBooleanExpr(JuniperConfiguration jc, Configuration c, Warnings warnings) { return new CallExpr(_policyStatement); } }
@Override public BooleanExpr toBooleanExpr(JuniperConfiguration jc, Configuration c, Warnings warnings) { Conjunction conj = new Conjunction(); for (String conjunct : _conjuncts) { PolicyStatement conjunctPs = jc.getMasterLogicalSystem().getPolicyStatements().get(conjunct); if (conjunctPs != null) { conj.getConjuncts().add(new CallExpr(conjunct)); } else { warnings.redFlag("Reference to undefined policy conjunct: \"" + conjunct + "\""); } } return conj; } }
RouteMap exportRouteMap = _routeMaps.get(exportRouteMapName); if (exportRouteMap != null) { ospfExportConditions.getConjuncts().add(new CallExpr(exportRouteMapName));
RouteMap exportRouteMap = oldConfig.getRouteMaps().get(exportRouteMapName); if (exportRouteMap != null) { eigrpExportConditions.getConjuncts().add(new CallExpr(exportRouteMapName));
if (exportPolicy != null) { setPolicyStatementReferent(exportPolicyName); CallExpr callPolicy = new CallExpr(exportPolicyName); matchSomeExportPolicy.getDisjuncts().add(callPolicy);
/** Policy with actual circular reference as expr */ @Test public void testRoutingPolicyCircularReferenceExpr() { String parentPolicyName = "parent"; CallExpr callExpr = new CallExpr(parentPolicyName); If ifStatement = new If(); ifStatement.setGuard(callExpr); _rpb.setName(parentPolicyName).setStatements(ImmutableList.of(ifStatement)).build(); _c.computeRoutingPolicySources(_w); /* * A circular reference warning should be emitted containing the name of the circularly * referenced policy. */ assertThat(_w.getRedFlagWarnings(), not(empty())); assertThat( _w.getRedFlagWarnings().iterator().next().getText(), containsString(parentPolicyName)); }
ripExportConnectedConditions .getConjuncts() .add(new CallExpr(exportConnectedRouteMapName)); RouteMap exportStaticRouteMap = _routeMaps.get(exportStaticRouteMapName); if (exportStaticRouteMap != null) { ripExportStaticConditions.getConjuncts().add(new CallExpr(exportStaticRouteMapName)); RouteMap exportBgpRouteMap = _routeMaps.get(exportBgpRouteMapName); if (exportBgpRouteMap != null) { ripExportBgpConditions.getConjuncts().add(new CallExpr(exportBgpRouteMapName));
ImmutableList.of(Statements.ExitReject.toStaticStatement()))); List<BooleanExpr> localOrCommonOrigination = new LinkedList<>(); localOrCommonOrigination.add(new CallExpr(computeBgpCommonExportPolicyName(vrf.getName()))); Statements.ReturnTrue.toStaticStatement()))); defaultRouteExportPolicy.getStatements().add(Statements.ReturnFalse.toStaticStatement()); localOrCommonOrigination.add(new CallExpr(defaultRouteExportPolicy.getName())); String outboundMap = naf4.getOutboundRouteMap(); if (outboundMap != null && c.getRoutingPolicies().containsKey(outboundMap)) { peerExportConditions.add(new CallExpr(outboundMap));
weInterior = new CallExpr(attributeMapName); gr.setAttributePolicy(attributeMapName); redistributeDefaultRoute, bgpRedistributeWithEnvironmentExpr( map == null ? BooleanExprs.TRUE : new CallExpr(routeMap), OriginType.INCOMPLETE)); Conjunction rip = new Conjunction(conditions); rip.setComment("Redistribute RIP routes into BGP"); redistributeDefaultRoute, bgpRedistributeWithEnvironmentExpr( map == null ? BooleanExprs.TRUE : new CallExpr(routeMap), OriginType.INCOMPLETE)); Conjunction staticRedist = new Conjunction(conditions); staticRedist.setComment("Redistribute static routes into BGP"); redistributeDefaultRoute, bgpRedistributeWithEnvironmentExpr( map == null ? BooleanExprs.TRUE : new CallExpr(routeMap), OriginType.INCOMPLETE)); Conjunction connected = new Conjunction(conditions); connected.setComment("Redistribute connected routes into BGP"); redistributeDefaultRoute, bgpRedistributeWithEnvironmentExpr( map == null ? BooleanExprs.TRUE : new CallExpr(routeMap), OriginType.INCOMPLETE)); Conjunction ospf = new Conjunction(conditions); ospf.setComment("Redistribute OSPF routes into BGP"); bgpRedistributeWithEnvironmentExpr( _routeMaps.containsKey(routeMapOrEmpty)
weInterior = new CallExpr(attributeMapName); gr.setAttributePolicy(attributeMapName); RouteMap redistributeRipRouteMap = _routeMaps.get(mapName); if (redistributeRipRouteMap != null) { weInterior = new CallExpr(mapName); RouteMap redistributeStaticRouteMap = _routeMaps.get(mapName); if (redistributeStaticRouteMap != null) { weInterior = new CallExpr(mapName); RouteMap redistributeConnectedRouteMap = _routeMaps.get(mapName); if (redistributeConnectedRouteMap != null) { weInterior = new CallExpr(mapName); RouteMap redistributeOspfRouteMap = _routeMaps.get(mapName); if (redistributeOspfRouteMap != null) { weInterior = new CallExpr(mapName); RouteMap routeMap = _routeMaps.get(mapName); if (routeMap != null) { weExpr = new CallExpr(mapName); if (routeMap != null) { BooleanExpr we = bgpRedistributeWithEnvironmentExpr(new CallExpr(mapName), OriginType.IGP); Conjunction exportNetwork6Conditions = new Conjunction(); Prefix6Space space6 = new Prefix6Space();
if (importPolicy != null) { setPolicyStatementReferent(importPolicyName); CallExpr callPolicy = new CallExpr(importPolicyName); importPolicyCalls.add(callPolicy); if (exportPolicy != null) { setPolicyStatementReferent(exportPolicyName); CallExpr callPolicy = new CallExpr(exportPolicyName); exportPolicyCalls.add(callPolicy);