use of org.batfish.common.plugin.DataPlanePlugin in project batfish by batfish.
the class BdpDataPlanePluginTest method testBgpNeighborReachability.
@Test
public void testBgpNeighborReachability() throws IOException {
// Only connect one neighbor (n2) to core router
SortedMap<String, Configuration> configs = generateNetworkWithDuplicates();
Batfish batfish = BatfishTestUtils.getBatfish(configs, _folder);
DataPlanePlugin dataPlanePlugin = new BdpDataPlanePlugin();
dataPlanePlugin.initialize(batfish);
dataPlanePlugin.computeDataPlane(false);
// N2 has proper neighbor relationship
Collection<BgpNeighbor> n2Neighbors = configs.get("n2").getVrfs().get(DEFAULT_VRF_NAME).getBgpProcess().getNeighbors().values();
assertThat(n2Neighbors, hasSize(1));
assertThat(n2Neighbors.iterator().next().getRemoteBgpNeighbor(), is(notNullValue()));
// N1 does not have a full session established, because it's not reachable
Collection<BgpNeighbor> n1Neighbors = configs.get("n1").getVrfs().get(DEFAULT_VRF_NAME).getBgpProcess().getNeighbors().values();
assertThat(n1Neighbors, hasSize(1));
assertThat(n1Neighbors.iterator().next().getRemoteBgpNeighbor(), is(nullValue()));
}
use of org.batfish.common.plugin.DataPlanePlugin in project batfish by batfish.
the class BdpDataPlanePluginTest method testIbgpRejectSameNeighborID.
@Test
public void testIbgpRejectSameNeighborID() throws IOException {
String testrigName = "ibgp-reject-routerid-match";
List<String> configurationNames = ImmutableList.of("r1", "r2", "r3", "r4");
Batfish batfish = BatfishTestUtils.getBatfishFromTestrigText(TestrigText.builder().setConfigurationText(TESTRIGS_PREFIX + testrigName, configurationNames).build(), _folder);
BdpDataPlanePlugin dataPlanePlugin = new BdpDataPlanePlugin();
dataPlanePlugin.initialize(batfish);
batfish.computeDataPlane(false);
SortedMap<String, SortedMap<String, SortedSet<AbstractRoute>>> routes = dataPlanePlugin.getRoutes(batfish.loadDataPlane());
SortedSet<AbstractRoute> r2Routes = routes.get("r2").get(DEFAULT_VRF_NAME);
SortedSet<AbstractRoute> r3Routes = routes.get("r3").get(DEFAULT_VRF_NAME);
Set<Prefix> r2Prefixes = r2Routes.stream().map(r -> r.getNetwork()).collect(Collectors.toSet());
Set<Prefix> r3Prefixes = r3Routes.stream().map(r -> r.getNetwork()).collect(Collectors.toSet());
// 9.9.9.9/32 is the prefix we test with
Prefix r1AdvertisedPrefix = Prefix.parse("9.9.9.9/32");
// Ensure that the prefix is accepted by r2, because router ids are different
assertThat(r1AdvertisedPrefix, isIn(r2Prefixes));
// Ensure that the prefix is rejected by r3, because router ids are the same
assertThat(r1AdvertisedPrefix, not(isIn(r3Prefixes)));
}
use of org.batfish.common.plugin.DataPlanePlugin in project batfish by batfish.
the class BdpDataPlanePluginTest method testEbgpAcceptSameNeighborID.
@Test
public void testEbgpAcceptSameNeighborID() throws IOException {
String testrigName = "ebgp-accept-routerid-match";
List<String> configurationNames = ImmutableList.of("r1", "r2", "r3");
Batfish batfish = BatfishTestUtils.getBatfishFromTestrigText(TestrigText.builder().setConfigurationText(TESTRIGS_PREFIX + testrigName, configurationNames).build(), _folder);
BdpDataPlanePlugin dataPlanePlugin = new BdpDataPlanePlugin();
dataPlanePlugin.initialize(batfish);
batfish.computeDataPlane(false);
SortedMap<String, SortedMap<String, SortedSet<AbstractRoute>>> routes = dataPlanePlugin.getRoutes(batfish.loadDataPlane());
SortedSet<AbstractRoute> r1Routes = routes.get("r1").get(DEFAULT_VRF_NAME);
SortedSet<AbstractRoute> r3Routes = routes.get("r3").get(DEFAULT_VRF_NAME);
Set<Prefix> r1Prefixes = r1Routes.stream().map(r -> r.getNetwork()).collect(Collectors.toSet());
Set<Prefix> r3Prefixes = r3Routes.stream().map(r -> r.getNetwork()).collect(Collectors.toSet());
Prefix r1Loopback0Prefix = Prefix.parse("1.0.0.1/32");
Prefix r3Loopback0Prefix = Prefix.parse("3.0.0.3/32");
// Ensure that r3loopback was accepted by r1
assertThat(r3Loopback0Prefix, isIn(r1Prefixes));
// Check the other direction (r1loopback is accepted by r3)
assertThat(r1Loopback0Prefix, isIn(r3Prefixes));
}
use of org.batfish.common.plugin.DataPlanePlugin in project batfish by batfish.
the class Batfish method computeCompressedDataPlane.
private CompressDataPlaneResult computeCompressedDataPlane(HeaderSpace headerSpace) {
// Since compression mutates the configurations, we must clone them before that happens.
// A simple way to do this is to create a deep clone of each entry using Java serialization.
_logger.info("Computing compressed dataplane");
Map<String, Configuration> clonedConfigs = loadConfigurations().entrySet().parallelStream().collect(toMap(Entry::getKey, entry -> SerializationUtils.clone(entry.getValue())));
Map<String, Configuration> configs = new BatfishCompressor(this, clonedConfigs).compress(headerSpace);
Topology topo = CommonUtil.synthesizeTopology(configs);
DataPlanePlugin dataPlanePlugin = getDataPlanePlugin();
ComputeDataPlaneResult result = dataPlanePlugin.computeDataPlane(false, configs, topo);
_storage.storeCompressedConfigurations(configs, _testrigSettings.getName());
return new CompressDataPlaneResult(configs, result._dataPlane, result._answerElement);
}
use of org.batfish.common.plugin.DataPlanePlugin in project batfish by batfish.
the class Batfish method populateFlowHistory.
private void populateFlowHistory(FlowHistory flowHistory, String envTag, Environment environment, String flowTag) {
DataPlanePlugin dataPlanePlugin = getDataPlanePlugin();
List<Flow> flows = dataPlanePlugin.getHistoryFlows(loadDataPlane());
List<FlowTrace> flowTraces = dataPlanePlugin.getHistoryFlowTraces(loadDataPlane());
int numEntries = flows.size();
for (int i = 0; i < numEntries; i++) {
Flow flow = flows.get(i);
if (flow.getTag().equals(flowTag)) {
FlowTrace flowTrace = flowTraces.get(i);
flowHistory.addFlowTrace(flow, envTag, environment, flowTrace);
}
}
}
Aggregations