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);
}
}
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();
}
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;
}
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();
}
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);
}
Aggregations