package org.batfish.common.plugin;
import java.util.List;
import java.util.Set;
import org.batfish.common.plugin.IDataPlanePlugin;
import org.batfish.datamodel.Flow;
import org.batfish.datamodel.FlowTrace;
import org.batfish.datamodel.answers.Answer;
import org.batfish.datamodel.collections.AdvertisementSet;
import org.batfish.datamodel.collections.IbgpTopology;
import org.batfish.datamodel.collections.RouteSet;
public abstract class DataPlanePlugin extends BatfishPlugin
implements IDataPlanePlugin {
private static DataPlanePlugin DATA_PLANE_PLUGIN;
private static Class<? extends DataPlanePlugin> DATA_PLANE_PLUGIN_CLASS;
public static synchronized DataPlanePlugin getDataPlanePlugin() {
return DATA_PLANE_PLUGIN;
}
public static synchronized Class<? extends DataPlanePlugin> getDataPlanePluginClass() {
return DATA_PLANE_PLUGIN_CLASS;
}
public static synchronized void setDataPlanePlugin(
DataPlanePlugin dataPlanePlugin) {
DATA_PLANE_PLUGIN = dataPlanePlugin;
}
public static synchronized void setDataPlanePluginClass(
Class<? extends DataPlanePlugin> dataPlanePlugin) {
DATA_PLANE_PLUGIN_CLASS = dataPlanePlugin;
}
@Override
protected final void batfishPluginInitialize() {
_batfish.setDataPlanePlugin(this);
dataPlanePluginInitialize();
}
public abstract Answer computeDataPlane(boolean differentialContext);
protected void dataPlanePluginInitialize() {
}
public abstract AdvertisementSet getAdvertisements();
public abstract List<Flow> getHistoryFlows();
public abstract List<FlowTrace> getHistoryFlowTraces();
public abstract IbgpTopology getIbgpNeighbors();
public abstract RouteSet getRoutes();
public abstract void processFlows(Set<Flow> flows);
}