Search in sources :

Example 6 with If

use of org.batfish.datamodel.routing_policy.statement.If in project batfish by batfish.

the class AstVisitor method visit.

/*
   * Walk starting from an AST statement
   */
public void visit(Configuration conf, Statement s, Consumer<Statement> fs, Consumer<BooleanExpr> fe) {
    fs.accept(s);
    if (s instanceof If) {
        If i = (If) s;
        visit(conf, i.getGuard(), fs, fe);
        visit(conf, i.getTrueStatements(), fs, fe);
        visit(conf, i.getFalseStatements(), fs, fe);
    } else if (s instanceof SetDefaultPolicy) {
        SetDefaultPolicy p = (SetDefaultPolicy) s;
        RoutingPolicy rp = conf.getRoutingPolicies().get(p.getDefaultPolicy());
        visit(conf, rp.getStatements(), fs, fe);
    }
}
Also used : RoutingPolicy(org.batfish.datamodel.routing_policy.RoutingPolicy) SetDefaultPolicy(org.batfish.datamodel.routing_policy.statement.SetDefaultPolicy) If(org.batfish.datamodel.routing_policy.statement.If)

Example 7 with If

use of org.batfish.datamodel.routing_policy.statement.If in project batfish by batfish.

the class JuniperConfiguration method toAggregateRoute.

private org.batfish.datamodel.GeneratedRoute toAggregateRoute(AggregateRoute route) {
    Prefix prefix = route.getPrefix();
    int prefixLength = prefix.getPrefixLength();
    int administrativeCost = route.getMetric();
    String policyNameSuffix = route.getPrefix().toString().replace('/', '_').replace('.', '_');
    String policyName = "~AGGREGATE_" + policyNameSuffix + "~";
    RoutingPolicy routingPolicy = new RoutingPolicy(policyName, _c);
    If routingPolicyConditional = new If();
    routingPolicy.getStatements().add(routingPolicyConditional);
    routingPolicyConditional.getTrueStatements().add(Statements.ExitAccept.toStaticStatement());
    routingPolicyConditional.getFalseStatements().add(Statements.ExitReject.toStaticStatement());
    String rflName = "~AGGREGATE_" + policyNameSuffix + "_RF~";
    MatchPrefixSet isContributingRoute = new MatchPrefixSet(new DestinationNetwork(), new NamedPrefixSet(rflName));
    routingPolicyConditional.setGuard(isContributingRoute);
    RouteFilterList rfList = new RouteFilterList(rflName);
    rfList.addLine(new org.batfish.datamodel.RouteFilterLine(LineAction.ACCEPT, prefix, new SubRange(prefixLength + 1, Prefix.MAX_PREFIX_LENGTH)));
    org.batfish.datamodel.GeneratedRoute.Builder newRoute = new org.batfish.datamodel.GeneratedRoute.Builder();
    newRoute.setNetwork(prefix);
    newRoute.setAdmin(administrativeCost);
    newRoute.setDiscard(true);
    newRoute.setGenerationPolicy(policyName);
    _c.getRoutingPolicies().put(policyName, routingPolicy);
    _c.getRouteFilterLists().put(rflName, rfList);
    return newRoute.build();
}
Also used : NamedPrefixSet(org.batfish.datamodel.routing_policy.expr.NamedPrefixSet) MatchPrefixSet(org.batfish.datamodel.routing_policy.expr.MatchPrefixSet) RoutingPolicy(org.batfish.datamodel.routing_policy.RoutingPolicy) Prefix(org.batfish.datamodel.Prefix) DestinationNetwork(org.batfish.datamodel.routing_policy.expr.DestinationNetwork) RouteFilterList(org.batfish.datamodel.RouteFilterList) SubRange(org.batfish.datamodel.SubRange) If(org.batfish.datamodel.routing_policy.statement.If)

Example 8 with If

use of org.batfish.datamodel.routing_policy.statement.If in project batfish by batfish.

the class JuniperConfiguration method createOspfProcess.

private OspfProcess createOspfProcess(RoutingInstance routingInstance) {
    OspfProcess newProc = new OspfProcess();
    String vrfName = routingInstance.getName();
    // export policies
    String ospfExportPolicyName = "~OSPF_EXPORT_POLICY:" + vrfName + "~";
    RoutingPolicy ospfExportPolicy = new RoutingPolicy(ospfExportPolicyName, _c);
    _c.getRoutingPolicies().put(ospfExportPolicyName, ospfExportPolicy);
    newProc.setExportPolicy(ospfExportPolicyName);
    If ospfExportPolicyConditional = new If();
    // TODO: set default metric-type for special cases based on ospf process
    // setttings
    ospfExportPolicy.getStatements().add(new SetOspfMetricType(OspfMetricType.E2));
    ospfExportPolicy.getStatements().add(ospfExportPolicyConditional);
    Disjunction matchSomeExportPolicy = new Disjunction();
    ospfExportPolicyConditional.setGuard(matchSomeExportPolicy);
    ospfExportPolicyConditional.getTrueStatements().add(Statements.ExitAccept.toStaticStatement());
    ospfExportPolicyConditional.getFalseStatements().add(Statements.ExitReject.toStaticStatement());
    routingInstance.getOspfExportPolicies().forEach((exportPolicyName, exportPolicyLine) -> {
        PolicyStatement exportPolicy = _policyStatements.get(exportPolicyName);
        if (exportPolicy == null) {
            undefined(JuniperStructureType.POLICY_STATEMENT, exportPolicyName, JuniperStructureUsage.OSPF_EXPORT_POLICY, exportPolicyLine);
        } else {
            setPolicyStatementReferent(exportPolicyName, routingInstance.getOspfExportPolicies(), "OSPF export policies");
            CallExpr callPolicy = new CallExpr(exportPolicyName);
            matchSomeExportPolicy.getDisjuncts().add(callPolicy);
        }
    });
    // areas
    Map<Long, OspfArea> newAreas = newProc.getAreas();
    newAreas.putAll(routingInstance.getOspfAreas());
    // place interfaces into areas
    for (Entry<String, Interface> e : routingInstance.getInterfaces().entrySet()) {
        String name = e.getKey();
        Interface iface = e.getValue();
        placeInterfaceIntoArea(newAreas, name, iface, vrfName);
    }
    newProc.setRouterId(routingInstance.getRouterId());
    newProc.setReferenceBandwidth(routingInstance.getOspfReferenceBandwidth());
    return newProc;
}
Also used : OspfArea(org.batfish.datamodel.OspfArea) OspfProcess(org.batfish.datamodel.OspfProcess) RoutingPolicy(org.batfish.datamodel.routing_policy.RoutingPolicy) Disjunction(org.batfish.datamodel.routing_policy.expr.Disjunction) CallExpr(org.batfish.datamodel.routing_policy.expr.CallExpr) SetOspfMetricType(org.batfish.datamodel.routing_policy.statement.SetOspfMetricType) If(org.batfish.datamodel.routing_policy.statement.If)

Example 9 with If

use of org.batfish.datamodel.routing_policy.statement.If in project batfish by batfish.

the class JuniperConfiguration method toGeneratedRoute.

private org.batfish.datamodel.GeneratedRoute toGeneratedRoute(GeneratedRoute route) {
    Prefix prefix = route.getPrefix();
    Integer administrativeCost = route.getPreference();
    if (administrativeCost == null) {
        administrativeCost = DEFAULT_AGGREGATE_ROUTE_PREFERENCE;
    }
    Integer metric = route.getMetric();
    if (metric == null) {
        metric = DEFAULT_AGGREGATE_ROUTE_COST;
    }
    String generationPolicyName = null;
    if (!route.getPolicies().isEmpty()) {
        generationPolicyName = "~GENERATED_ROUTE_POLICY:" + prefix + "~";
        RoutingPolicy generationPolicy = new RoutingPolicy(generationPolicyName, _c);
        _c.getRoutingPolicies().put(generationPolicyName, generationPolicy);
        If generationPolicyConditional = new If();
        Disjunction matchSomeGenerationPolicy = new Disjunction();
        generationPolicyConditional.setGuard(matchSomeGenerationPolicy);
        generationPolicyConditional.getTrueStatements().add(Statements.ExitAccept.toStaticStatement());
        generationPolicyConditional.getFalseStatements().add(Statements.ExitReject.toStaticStatement());
        generationPolicy.getStatements().add(generationPolicyConditional);
        route.getPolicies().forEach((policyName, policyLine) -> {
            PolicyStatement policy = _policyStatements.get(policyName);
            if (policy == null) {
                undefined(JuniperStructureType.POLICY_STATEMENT, policyName, JuniperStructureUsage.GENERATED_ROUTE_POLICY, policyLine);
            } else {
                setPolicyStatementReferent(policyName, route.getPolicies(), "Generated route policy for prefix: " + route.getPrefix());
                CallExpr callPolicy = new CallExpr(policyName);
                matchSomeGenerationPolicy.getDisjuncts().add(callPolicy);
            }
        });
    }
    org.batfish.datamodel.GeneratedRoute.Builder newRoute = new org.batfish.datamodel.GeneratedRoute.Builder();
    newRoute.setNetwork(prefix);
    newRoute.setAdmin(administrativeCost);
    newRoute.setMetric(metric);
    newRoute.setGenerationPolicy(generationPolicyName);
    return newRoute.build();
}
Also used : RoutingPolicy(org.batfish.datamodel.routing_policy.RoutingPolicy) Prefix(org.batfish.datamodel.Prefix) Disjunction(org.batfish.datamodel.routing_policy.expr.Disjunction) CallExpr(org.batfish.datamodel.routing_policy.expr.CallExpr) If(org.batfish.datamodel.routing_policy.statement.If)

Example 10 with If

use of org.batfish.datamodel.routing_policy.statement.If in project batfish by batfish.

the class JuniperConfiguration method initDefaultBgpExportPolicy.

private void initDefaultBgpExportPolicy() {
    if (_c.getRoutingPolicies().containsKey(DEFAULT_BGP_EXPORT_POLICY_NAME)) {
        return;
    }
    // set up default export policy (accept bgp routes)
    RoutingPolicy defaultBgpExportPolicy = new RoutingPolicy(DEFAULT_BGP_EXPORT_POLICY_NAME, _c);
    _c.getRoutingPolicies().put(DEFAULT_BGP_EXPORT_POLICY_NAME, defaultBgpExportPolicy);
    If defaultBgpExportPolicyConditional = new If();
    defaultBgpExportPolicy.getStatements().add(defaultBgpExportPolicyConditional);
    // guard
    Disjunction isBgp = new Disjunction();
    isBgp.getDisjuncts().add(new MatchProtocol(RoutingProtocol.BGP));
    isBgp.getDisjuncts().add(new MatchProtocol(RoutingProtocol.IBGP));
    defaultBgpExportPolicyConditional.setGuard(isBgp);
    PsThenAccept.INSTANCE.applyTo(defaultBgpExportPolicyConditional.getTrueStatements(), this, _c, _w);
    PsThenReject.INSTANCE.applyTo(defaultBgpExportPolicyConditional.getFalseStatements(), this, _c, _w);
}
Also used : Disjunction(org.batfish.datamodel.routing_policy.expr.Disjunction) RoutingPolicy(org.batfish.datamodel.routing_policy.RoutingPolicy) If(org.batfish.datamodel.routing_policy.statement.If) MatchProtocol(org.batfish.datamodel.routing_policy.expr.MatchProtocol)

Aggregations

If (org.batfish.datamodel.routing_policy.statement.If)35 RoutingPolicy (org.batfish.datamodel.routing_policy.RoutingPolicy)22 Statement (org.batfish.datamodel.routing_policy.statement.Statement)20 Prefix (org.batfish.datamodel.Prefix)14 CallExpr (org.batfish.datamodel.routing_policy.expr.CallExpr)13 BooleanExpr (org.batfish.datamodel.routing_policy.expr.BooleanExpr)12 Disjunction (org.batfish.datamodel.routing_policy.expr.Disjunction)12 ArrayList (java.util.ArrayList)11 Conjunction (org.batfish.datamodel.routing_policy.expr.Conjunction)11 MatchPrefixSet (org.batfish.datamodel.routing_policy.expr.MatchPrefixSet)11 BatfishException (org.batfish.common.BatfishException)10 MatchProtocol (org.batfish.datamodel.routing_policy.expr.MatchProtocol)10 HashMap (java.util.HashMap)9 Map (java.util.Map)9 DestinationNetwork (org.batfish.datamodel.routing_policy.expr.DestinationNetwork)9 SetOspfMetricType (org.batfish.datamodel.routing_policy.statement.SetOspfMetricType)9 Set (java.util.Set)8 BgpNeighbor (org.batfish.datamodel.BgpNeighbor)8 Configuration (org.batfish.datamodel.Configuration)8 GeneratedRoute (org.batfish.datamodel.GeneratedRoute)8