package org.batfish.common.plugin; import java.util.Map; import java.util.Set; import java.util.SortedMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.BiFunction; import org.batfish.common.Answerer; import org.batfish.common.Directory; import org.batfish.datamodel.Configuration; import org.batfish.datamodel.DataPlane; import org.batfish.datamodel.Flow; import org.batfish.datamodel.FlowHistory; import org.batfish.datamodel.ForwardingAction; import org.batfish.datamodel.HeaderSpace; import org.batfish.datamodel.Ip; import org.batfish.datamodel.Topology; import org.batfish.datamodel.answers.AnswerElement; import org.batfish.datamodel.answers.ConvertConfigurationAnswerElement; import org.batfish.datamodel.answers.DataPlaneAnswerElement; import org.batfish.datamodel.answers.InitInfoAnswerElement; import org.batfish.datamodel.answers.ParseEnvironmentBgpTablesAnswerElement; import org.batfish.datamodel.answers.ParseEnvironmentRoutingTablesAnswerElement; import org.batfish.datamodel.answers.ParseVendorConfigurationAnswerElement; import org.batfish.datamodel.assertion.AssertionAst; import org.batfish.datamodel.collections.AdvertisementSet; import org.batfish.datamodel.collections.BgpAdvertisementsByVrf; import org.batfish.datamodel.collections.InterfaceSet; import org.batfish.datamodel.collections.NamedStructureEquivalenceSets; import org.batfish.datamodel.collections.NodeInterfacePair; import org.batfish.datamodel.collections.NodeSet; import org.batfish.datamodel.collections.RoutesByVrf; import org.batfish.datamodel.questions.Question; import org.batfish.grammar.BgpTableFormat; import org.batfish.grammar.GrammarSettings; public interface IBatfish extends IPluginConsumer { AnswerElement answerAclReachability(String aclNameRegexStr, NamedStructureEquivalenceSets<?> aclEqSets); void checkConfigurations(); void checkDataPlane(); void checkDataPlaneQuestionDependencies(); void checkEnvironmentExists(); InterfaceSet computeFlowSinks(Map<String, Configuration> configurations, boolean differentialContext, Topology topology); Map<Ip, Set<String>> computeIpOwners( Map<String, Configuration> configurations, boolean excludeInactive); Topology computeTopology(Map<String, Configuration> configurations); AnswerElement createEnvironment(String environmentName, NodeSet nodeBlacklist, Set<NodeInterfacePair> interfaceBlacklist, Topology edgeBlacklist, boolean dp); Map<String, BiFunction<Question, IBatfish, Answerer>> getAnswererCreators(); String getDifferentialFlowTag(); String getFlowTag(); GrammarSettings getGrammarSettings(); FlowHistory getHistory(); Directory getTestrigFileTree(); void initBgpAdvertisements(Map<String, Configuration> configurations); void initBgpOriginationSpaceExplicit( Map<String, Configuration> configurations); InitInfoAnswerElement initInfo(boolean summary, boolean environmentRoutes); void initRemoteBgpNeighbors(Map<String, Configuration> configurations, Map<Ip, Set<String>> ipOwners); void initRemoteIpsecVpns(Map<String, Configuration> configurations); void initRemoteOspfNeighbors(Map<String, Configuration> configurations, Map<Ip, Set<String>> ipOwners, Topology topology); void initRoutes(Map<String, Configuration> configurations); SortedMap<String, Configuration> loadConfigurations(); ConvertConfigurationAnswerElement loadConvertConfigurationAnswerElement(); DataPlane loadDataPlane(); SortedMap<String, BgpAdvertisementsByVrf> loadEnvironmentBgpTables(); SortedMap<String, RoutesByVrf> loadEnvironmentRoutingTables(); ParseEnvironmentBgpTablesAnswerElement loadParseEnvironmentBgpTablesAnswerElement(); ParseEnvironmentRoutingTablesAnswerElement loadParseEnvironmentRoutingTablesAnswerElement(); ParseVendorConfigurationAnswerElement loadParseVendorConfigurationAnswerElement(); AnswerElement multipath(HeaderSpace headerSpace); AtomicInteger newBatch(String description, int jobs); AssertionAst parseAssertion(String text); AnswerElement pathDiff(HeaderSpace headerSpace); void popEnvironment(); void printElapsedTime(); AdvertisementSet processExternalBgpAnnouncements( Map<String, Configuration> configurations); void processFlows(Set<Flow> flows); void pushBaseEnvironment(); void pushDeltaEnvironment(); String readExternalBgpAnnouncementsFile(); AnswerElement reducedReachability(HeaderSpace headerSpace); void registerAnswerer(String questionName, String questionClassName, BiFunction<Question, IBatfish, Answerer> answererCreator); void registerBgpTablePlugin(BgpTableFormat format, BgpTablePlugin bgpTablePlugin); void registerExternalBgpAdvertisementPlugin( ExternalBgpAdvertisementPlugin externalBgpAdvertisementPlugin); void resetTimer(); void setDataPlanePlugin(DataPlanePlugin dataPlanePlugin); AnswerElement standard(HeaderSpace headerSpace, Set<ForwardingAction> actions, String ingressNodeRegexStr, String notIngressNodeRegexStr, String finalNodeRegexStr, String notFinalNodeRegexStr); void writeDataPlane(DataPlane dp, DataPlaneAnswerElement ae); }