use of org.batfish.common.BatfishLogger in project batfish by batfish.
the class OspfTest method getOspfRoutes.
/*
* Int:1/2 2/1 2/3 3/2 3/4 4/3
* R1 <=========> R2 <=========> R3 <=========> R4
* A B C D E F G
*
* Areas:
* A: R1 Loopback0
* B: R1 E1/2, R2 E2/1
* C: R2 Loopback0
* D: R2 E2/3, R3 E3/2
* E: R3 Loopback0
* F: R3 E3/4, R4 E4/3
* G: R4 Loopback0
*/
private SortedMap<String, SortedMap<String, SortedSet<AbstractRoute>>> getOspfRoutes(long areaA, long areaB, long areaC, long areaD, long areaE, long areaF, long areaG, Long maxMetricExternalNetworks, Long maxMetricStubNetworks, Long maxMetricSummaryNetworks, Long maxMetricTransitLinks) {
String l0Name = "Loopback0";
String l1Name = "Loopback1";
String c1E1To2Name = "Ethernet1/2";
String c2E2To1Name = "Ethernet2/1";
String c2E2To3Name = "Ethernet2/3";
String c3E3To2Name = "Ethernet3/2";
String c3E3To4Name = "Ethernet3/4";
String c4E4To3Name = "Ethernet4/3";
RoutingPolicy.Builder rpb = _nf.routingPolicyBuilder();
OspfArea.Builder oaba = _nf.ospfAreaBuilder().setNumber(areaA);
OspfArea.Builder oabb = _nf.ospfAreaBuilder().setNumber(areaB);
OspfArea.Builder oabc = _nf.ospfAreaBuilder().setNumber(areaC);
OspfArea.Builder oabd = _nf.ospfAreaBuilder().setNumber(areaD);
OspfArea.Builder oabe = _nf.ospfAreaBuilder().setNumber(areaE);
OspfArea.Builder oabf = _nf.ospfAreaBuilder().setNumber(areaF);
OspfArea.Builder oabg = _nf.ospfAreaBuilder().setNumber(areaG);
Configuration c1 = _cb.setHostname(C1_NAME).build();
Vrf v1 = _vb.setOwner(c1).build();
RoutingPolicy c1ExportPolicy = rpb.setOwner(c1).setStatements(getExportPolicyStatements(C1_L1_ADDRESS)).build();
OspfProcess op1 = _opb.setVrf(v1).setExportPolicy(c1ExportPolicy).build();
OspfArea oa1a = oaba.setOspfProcess(op1).build();
OspfArea oa1b = areaA == areaB ? oa1a : oabb.setOspfProcess(op1).build();
_ib.setOwner(c1).setVrf(v1).setOspfArea(oa1a);
_ib.setOspfPassive(true).setName(l0Name).setAddress(C1_L0_ADDRESS).build();
_ib.setOspfEnabled(false).setOspfPassive(false).setOspfArea(null).setName(l1Name).setAddress(C1_L1_ADDRESS).build();
_ib.setOspfEnabled(true).setOspfArea(oa1b);
_ib.setName(c1E1To2Name).setAddress(C1_E1_2_ADDRESS).build();
Configuration c2 = _cb.setHostname(C2_NAME).build();
Vrf v2 = _vb.setOwner(c2).build();
RoutingPolicy c2ExportPolicy = rpb.setOwner(c2).setStatements(getExportPolicyStatements(C2_L1_ADDRESS)).build();
OspfProcess op2 = _opb.setVrf(v2).setMaxMetricExternalNetworks(maxMetricExternalNetworks).setMaxMetricStubNetworks(maxMetricStubNetworks).setMaxMetricSummaryNetworks(maxMetricSummaryNetworks).setMaxMetricTransitLinks(maxMetricTransitLinks).setExportPolicy(c2ExportPolicy).build();
_opb.setMaxMetricExternalNetworks(null).setMaxMetricStubNetworks(null).setMaxMetricSummaryNetworks(null).setMaxMetricTransitLinks(null);
OspfArea oa2b = oabb.setOspfProcess(op2).build();
OspfArea oa2c = areaB == areaC ? oa2b : oabc.setOspfProcess(op2).build();
OspfArea oa2d = areaB == areaD ? oa2b : areaC == areaD ? oa2c : oabd.setOspfProcess(op2).build();
_ib.setOwner(c2).setVrf(v2).setOspfArea(oa2c);
_ib.setOspfPassive(true).setName(l0Name).setAddress(C2_L0_ADDRESS).build();
_ib.setOspfEnabled(false).setOspfPassive(false).setOspfArea(null).setName(l1Name).setAddress(C2_L1_ADDRESS).build();
_ib.setOspfEnabled(true).setOspfArea(oa2b);
_ib.setName(c2E2To1Name).setAddress(C2_E2_1_ADDRESS).setOspfPointToPoint(true).build();
_ib.setOspfPointToPoint(false).setOspfArea(oa2d);
_ib.setName(c2E2To3Name).setAddress(C2_E2_3_ADDRESS).build();
Configuration c3 = _cb.setHostname(C3_NAME).build();
Vrf v3 = _vb.setOwner(c3).build();
RoutingPolicy c3ExportPolicy = rpb.setOwner(c3).setStatements(getExportPolicyStatements(C3_L1_ADDRESS)).build();
OspfProcess op3 = _opb.setVrf(v3).setExportPolicy(c3ExportPolicy).build();
OspfArea oa3d = oabd.setOspfProcess(op3).build();
OspfArea oa3e = areaD == areaE ? oa3d : oabe.setOspfProcess(op3).build();
OspfArea oa3f = areaD == areaF ? oa3d : areaE == areaF ? oa3e : oabf.setOspfProcess(op3).build();
_ib.setOwner(c3).setVrf(v3).setOspfArea(oa3e);
_ib.setOspfPassive(true).setName(l0Name).setAddress(C3_L0_ADDRESS).build();
_ib.setOspfEnabled(false).setOspfPassive(false).setOspfArea(null).setName(l1Name).setAddress(C3_L1_ADDRESS).build();
_ib.setOspfEnabled(true).setOspfArea(oa3d);
_ib.setName(c3E3To2Name).setAddress(C3_E3_2_ADDRESS).build();
_ib.setName(c3E3To4Name).setAddress(C3_E3_4_ADDRESS).setOspfArea(oa3f).build();
Configuration c4 = _cb.setHostname(C4_NAME).build();
Vrf v4 = _vb.setOwner(c4).build();
RoutingPolicy c4ExportPolicy = rpb.setOwner(c4).setStatements(getExportPolicyStatements(C4_L1_ADDRESS)).build();
OspfProcess op4 = _opb.setVrf(v4).setExportPolicy(c4ExportPolicy).build();
OspfArea oa4f = oabf.setOspfProcess(op4).build();
OspfArea oa4g = areaF == areaG ? oa4f : oabg.setOspfProcess(op4).build();
_ib.setOwner(c4).setVrf(v4).setOspfArea(oa4g);
_ib.setOspfPassive(true).setName(l0Name).setAddress(C4_L0_ADDRESS).build();
_ib.setOspfEnabled(false).setOspfPassive(false).setOspfArea(null).setName(l1Name).setAddress(C4_L1_ADDRESS).build();
_ib.setOspfEnabled(true).setOspfArea(oa4f);
_ib.setName(c4E4To3Name).setAddress(C4_E4_3_ADDRESS).build();
SortedMap<String, Configuration> configurations = new ImmutableSortedMap.Builder<String, Configuration>(String::compareTo).put(c1.getName(), c1).put(c2.getName(), c2).put(c3.getName(), c3).put(c4.getName(), c4).build();
BdpEngine engine = new BdpEngine(new MockBdpSettings(), new BatfishLogger(BatfishLogger.LEVELSTR_OUTPUT, false), (s, i) -> new AtomicInteger());
Topology topology = CommonUtil.synthesizeTopology(configurations);
BdpDataPlane dp = engine.computeDataPlane(false, configurations, topology, Collections.emptySet(), new BdpAnswerElement());
return engine.getRoutes(dp);
}
use of org.batfish.common.BatfishLogger in project batfish by batfish.
the class RouteReflectionTest method generateRoutesOneReflector.
/*
* See documentation of calling functions for information description of produced network
*/
private SortedMap<String, SortedMap<String, SortedSet<AbstractRoute>>> generateRoutesOneReflector(boolean edge1RouteReflectorClient, boolean edge2RouteReflectorClient) {
Ip as1PeeringIp = new Ip("10.12.11.1");
Ip edge1EbgpIfaceIp = new Ip("10.12.11.2");
Ip edge1IbgpIfaceIp = new Ip("10.1.12.1");
Ip edge1LoopbackIp = new Ip("2.0.0.1");
Ip rrEdge1IfaceIp = new Ip("10.1.12.2");
Ip rrEdge2IfaceIp = new Ip("10.1.23.2");
Ip rrLoopbackIp = new Ip("2.0.0.2");
Ip as3PeeringIp = new Ip("10.23.31.3");
Ip edge2EbgpIfaceIp = new Ip("10.23.31.2");
Ip edge2IbgpIfaceIp = new Ip("10.1.23.3");
Ip edge2LoopbackIp = new Ip("2.0.0.3");
Configuration edge1 = _cb.setHostname(EDGE1_NAME).build();
Vrf vEdge1 = _vb.setOwner(edge1).build();
_ib.setOwner(edge1).setVrf(vEdge1);
_ib.setAddress(new InterfaceAddress(edge1EbgpIfaceIp, EDGE_PREFIX_LENGTH)).build();
_ib.setAddress(new InterfaceAddress(edge1LoopbackIp, Prefix.MAX_PREFIX_LENGTH)).build();
_ib.setAddress(new InterfaceAddress(edge1IbgpIfaceIp, EDGE_PREFIX_LENGTH)).build();
StaticRoute.Builder sb = StaticRoute.builder();
vEdge1.setStaticRoutes(ImmutableSortedSet.of(sb.setNextHopIp(rrEdge1IfaceIp).setNetwork(new Prefix(rrLoopbackIp, Prefix.MAX_PREFIX_LENGTH)).build()));
BgpProcess edge1Proc = _pb.setRouterId(edge1LoopbackIp).setVrf(vEdge1).build();
RoutingPolicy edge1EbgpExportPolicy = _nullExportPolicyBuilder.setOwner(edge1).build();
_nb.setOwner(edge1).setVrf(vEdge1).setBgpProcess(edge1Proc).setClusterId(edge1LoopbackIp.asLong()).setRemoteAs(1).setLocalIp(edge1EbgpIfaceIp).setPeerAddress(as1PeeringIp).setExportPolicy(edge1EbgpExportPolicy.getName()).build();
RoutingPolicy edge1IbgpExportPolicy = _defaultExportPolicyBuilder.setOwner(edge1).build();
_nb.setRemoteAs(2).setLocalIp(edge1LoopbackIp).setPeerAddress(rrLoopbackIp).setExportPolicy(edge1IbgpExportPolicy.getName()).build();
Configuration rr = _cb.setHostname(RR_NAME).build();
Vrf vRr = _vb.setOwner(rr).build();
_ib.setOwner(rr).setVrf(vRr);
_ib.setAddress(new InterfaceAddress(rrEdge1IfaceIp, EDGE_PREFIX_LENGTH)).build();
_ib.setAddress(new InterfaceAddress(rrLoopbackIp, Prefix.MAX_PREFIX_LENGTH)).build();
_ib.setAddress(new InterfaceAddress(rrEdge2IfaceIp, EDGE_PREFIX_LENGTH)).build();
vRr.setStaticRoutes(ImmutableSortedSet.of(sb.setNextHopIp(edge1IbgpIfaceIp).setNetwork(new Prefix(edge1LoopbackIp, Prefix.MAX_PREFIX_LENGTH)).build(), sb.setNextHopIp(edge2IbgpIfaceIp).setNetwork(new Prefix(edge2LoopbackIp, Prefix.MAX_PREFIX_LENGTH)).build()));
BgpProcess rrProc = _pb.setRouterId(rrLoopbackIp).setVrf(vRr).build();
RoutingPolicy rrExportPolicy = _defaultExportPolicyBuilder.setOwner(rr).build();
_nb.setOwner(rr).setVrf(vRr).setBgpProcess(rrProc).setClusterId(rrLoopbackIp.asLong()).setRemoteAs(2).setLocalIp(rrLoopbackIp).setExportPolicy(rrExportPolicy.getName());
if (edge1RouteReflectorClient) {
_nb.setRouteReflectorClient(true);
}
_nb.setPeerAddress(edge1LoopbackIp).build();
_nb.setRouteReflectorClient(false);
if (edge2RouteReflectorClient) {
_nb.setRouteReflectorClient(true);
}
_nb.setPeerAddress(edge2LoopbackIp).build();
_nb.setRouteReflectorClient(false);
Configuration edge2 = _cb.setHostname(EDGE2_NAME).build();
Vrf vEdge2 = _vb.setOwner(edge2).build();
_ib.setOwner(edge2).setVrf(vEdge2);
_ib.setAddress(new InterfaceAddress(edge2EbgpIfaceIp, EDGE_PREFIX_LENGTH)).build();
_ib.setAddress(new InterfaceAddress(edge2LoopbackIp, Prefix.MAX_PREFIX_LENGTH)).build();
_ib.setAddress(new InterfaceAddress(edge2IbgpIfaceIp, EDGE_PREFIX_LENGTH)).build();
vEdge2.setStaticRoutes(ImmutableSortedSet.of(sb.setNextHopIp(rrEdge2IfaceIp).setNetwork(new Prefix(rrLoopbackIp, Prefix.MAX_PREFIX_LENGTH)).build()));
BgpProcess edge2Proc = _pb.setRouterId(edge2LoopbackIp).setVrf(vEdge2).build();
RoutingPolicy edge2EbgpExportPolicy = _nullExportPolicyBuilder.setOwner(edge2).build();
_nb.setOwner(edge2).setVrf(vEdge2).setBgpProcess(edge2Proc).setClusterId(edge2LoopbackIp.asLong()).setRemoteAs(3).setLocalIp(edge2EbgpIfaceIp).setPeerAddress(as3PeeringIp).setExportPolicy(edge2EbgpExportPolicy.getName()).build();
RoutingPolicy edge2IbgpExportPolicy = _defaultExportPolicyBuilder.setOwner(edge2).build();
_nb.setRemoteAs(2).setLocalIp(edge2LoopbackIp).setPeerAddress(rrLoopbackIp).setExportPolicy(edge2IbgpExportPolicy.getName()).build();
SortedMap<String, Configuration> configurations = new ImmutableSortedMap.Builder<String, Configuration>(String::compareTo).put(edge1.getName(), edge1).put(rr.getName(), rr).put(edge2.getName(), edge2).build();
BdpEngine engine = new BdpEngine(new MockBdpSettings(), new BatfishLogger(BatfishLogger.LEVELSTR_OUTPUT, false), (s, i) -> new AtomicInteger());
Topology topology = CommonUtil.synthesizeTopology(configurations);
BdpDataPlane dp = engine.computeDataPlane(false, configurations, topology, ImmutableSet.of(_ab.setAsPath(AsPath.ofSingletonAsSets(1)).setDstIp(edge1EbgpIfaceIp).setDstNode(edge1.getName()).setNetwork(AS1_PREFIX).setNextHopIp(as1PeeringIp).setOriginatorIp(as1PeeringIp).setSrcIp(as1PeeringIp).setSrcNode("as1Edge").build(), _ab.setAsPath(AsPath.ofSingletonAsSets(3)).setDstIp(edge2EbgpIfaceIp).setDstNode(edge2.getName()).setNetwork(AS3_PREFIX).setNextHopIp(as3PeeringIp).setOriginatorIp(as3PeeringIp).setSrcIp(as3PeeringIp).setSrcNode("as3Edge").build()), new BdpAnswerElement());
return engine.getRoutes(dp);
}
use of org.batfish.common.BatfishLogger in project batfish by batfish.
the class BatfishJobExecutorTest method testHandleJobResultSuccess.
@Test
public void testHandleJobResultSuccess() {
Settings settings = new Settings();
// initializing executor
BatfishJobExecutor executor = BatfishJobExecutor.getBatfishJobExecutor(settings, _logger);
executor.initializeJobsStats(Lists.newArrayList(new BfTestJob(settings, "result1")), TEST_EXECUTOR_DESC);
// Simulating finishing of a job and handling the result
// initiating a separate logger from the Executor logger
BatfishLogger jobLogger = new BatfishLogger(BatfishLogger.LEVELSTR_INFO, false);
BfTestResult bfTestResult = new BfTestResult(TEST_ELAPSED_TIME, jobLogger.getHistory(), "result");
Set<String> output = new HashSet<>();
List<BatfishException> failureCauses = new ArrayList<>();
BfTestAnswerElement ae = new BfTestAnswerElement();
executor.markJobCompleted();
executor.handleJobResult(bfTestResult, output, ae, failureCauses, false);
// checking the log of the executor for the job finished
assertEquals(_logger.getHistory().toString(BatfishLogger.LEVEL_INFO), executor.getSuccessMessage(bfTestResult));
}
use of org.batfish.common.BatfishLogger in project batfish by batfish.
the class BatfishStorageTest method before.
@Before
public void before() throws IOException {
_containerDir = _folder.newFolder("container").toPath();
_logger = new BatfishLogger(BatfishLogger.LEVELSTR_DEBUG, false);
_storage = new BatfishStorage(_containerDir, _logger, (m, n) -> new AtomicInteger());
}
use of org.batfish.common.BatfishLogger in project batfish by batfish.
the class BatfishTestUtils method getBatfishFromTestrigText.
/**
* Get a new Batfish instance with given configurations, tempFolder should be present for
* non-empty configurations
*
* @param testrigText Structure containing names and content of testrig input files
* @param tempFolder Temporary folder to be used to files required for Batfish
* @return Batfish instance pointing at new testrig comprising testrigText
*/
public static Batfish getBatfishFromTestrigText(TestrigText testrigText, TemporaryFolder tempFolder) throws IOException {
Map<String, String> awsText = testrigText.getAwsText();
Map<String, String> bgpTablesText = testrigText.getBgpTablesText();
Map<String, String> configurationText = testrigText.getConfigurationText();
Map<String, String> hostsText = testrigText.getHostsText();
Map<String, String> iptablesFilesText = testrigText.getIptablesFilesText();
Map<String, String> routingTablesText = testrigText.getRoutingTablesText();
Settings settings = new Settings(new String[] {});
settings.setLogger(new BatfishLogger("debug", false));
settings.setDisableUnrecognized(true);
settings.setHaltOnConvertError(true);
settings.setHaltOnParseError(true);
settings.setThrowOnLexerError(true);
settings.setThrowOnParserError(true);
settings.setVerboseParse(true);
Path containerDir = tempFolder.newFolder().toPath();
settings.setContainerDir(containerDir);
settings.setTestrig("tempTestrig");
settings.setEnvironmentName("tempEnvironment");
settings.setDataplaneEngineName(BdpDataPlanePlugin.PLUGIN_NAME);
Batfish.initTestrigSettings(settings);
Path testrigPath = settings.getBaseTestrigSettings().getTestRigPath();
settings.setActiveTestrigSettings(settings.getBaseTestrigSettings());
EnvironmentSettings envSettings = settings.getBaseTestrigSettings().getEnvironmentSettings();
envSettings.getEnvPath().toFile().mkdirs();
writeTemporaryTestrigFiles(configurationText, testrigPath.resolve(BfConsts.RELPATH_CONFIGURATIONS_DIR));
writeTemporaryTestrigFiles(awsText, testrigPath.resolve(BfConsts.RELPATH_AWS_CONFIGS_DIR));
writeTemporaryTestrigFiles(bgpTablesText, envSettings.getEnvironmentBgpTablesPath());
writeTemporaryTestrigFiles(hostsText, testrigPath.resolve(BfConsts.RELPATH_HOST_CONFIGS_DIR));
writeTemporaryTestrigFiles(iptablesFilesText, testrigPath.resolve("iptables"));
writeTemporaryTestrigFiles(routingTablesText, envSettings.getEnvironmentRoutingTablesPath());
Batfish batfish = new Batfish(settings, makeTestrigCache(), makeTestrigCache(), makeDataPlaneCache(), makeDataPlaneCache(), makeEnvBgpCache(), makeEnvRouteCache(), makeForwardingAnalysisCache());
return batfish;
}
Aggregations