@Override public TableAnswerElement answer() { Multiset<Row> rows = getRows(); TestFiltersQuestion question = (TestFiltersQuestion) _question; TableAnswerElement answer = create(question); answer.postProcessAnswer(question, rows); return answer; }
@Override public AnswerElement answer() { BgpSessionStatusQuestion question = (BgpSessionStatusQuestion) _question; TableAnswerElement answer = new TableAnswerElement(createMetadata(question)); answer.postProcessAnswer(question, getRows(question)); return answer; }
@Override public AnswerElement answer() { DefinedStructuresQuestion question = (DefinedStructuresQuestion) _question; Multiset<Row> structures = rawAnswer(question); TableAnswerElement answer = new TableAnswerElement(createMetadata(question)); answer.postProcessAnswer(question, structures); return answer; }
@Override public AnswerElement answer() { BgpSessionCompatibilityQuestion question = (BgpSessionCompatibilityQuestion) _question; TableAnswerElement answer = new TableAnswerElement(BgpSessionCompatibilityAnswerer.createMetadata(question)); answer.postProcessAnswer(question, getRows(question)); return answer; }
@Override public TableAnswerElement answer() { FilterLineReachabilityQuestion question = (FilterLineReachabilityQuestion) _question; FilterLineReachabilityRows answerRows = new FilterLineReachabilityRows(); SpecifierContext ctxt = _batfish.specifierContext(); Map<String, Set<IpAccessList>> specifiedAcls = getSpecifiedFilters(question, ctxt); // did we get any filters at all? if (specifiedAcls.values().stream().allMatch(fset -> fset.size() == 0)) { throw new IllegalArgumentException( "Did not find any filters that meets the specified criteria. (Tips: Set 'ignoreGenerated' to false if you want to analyze combined filters; use 'resolveFilterSpecifier' question to see which filters your nodes and filters match.)"); } SortedMap<String, Configuration> configurations = _batfish.loadConfigurations(); List<AclSpecs> aclSpecs = getAclSpecs(configurations, specifiedAcls, answerRows); answerAclReachability(aclSpecs, answerRows); TableAnswerElement answer = new TableAnswerElement(createMetadata(question)); answer.postProcessAnswer(question, answerRows.getRows()); return answer; }
@Override public AnswerElement answer() { String tag = _batfish.getFlowTag(); Set<Flow> flows = _helper.getFlows(tag); TracerouteEngine tracerouteEngine = _batfish.getTracerouteEngine(); List<BidirectionalTrace> bidirectionalTraces = computeBidirectionalTraces(flows, tracerouteEngine, _ignoreFilters); ImmutableMultiset<Row> rows = prune(bidirectionalTraces, _maxTraces).stream() .map(BidirectionalTracerouteAnswerer::toRow) .collect(ImmutableMultiset.toImmutableMultiset()); TableAnswerElement table = new TableAnswerElement(metadata()); table.postProcessAnswer(_question, rows); return table; }
@Override public TableAnswerElement answer() { ParseVendorConfigurationAnswerElement pvcae = _batfish.loadParseVendorConfigurationAnswerElement(); Map<String, ParseStatus> statusMap = pvcae.getParseStatus(); Rows rows = new Rows(); Multimap<String, String> fileToHost = TreeMultimap.create(); pvcae.getFileMap().forEach((hostname, filename) -> fileToHost.put(filename, hostname)); statusMap.forEach( (filename, status) -> rows.add(getRow(filename, status, fileToHost.get(filename)))); TableAnswerElement answerElement = new TableAnswerElement(TABLE_METADATA); answerElement.postProcessAnswer(_question, rows.getData()); return answerElement; }
@Override public TableAnswerElement answer() { NamedStructuresQuestion question = (NamedStructuresQuestion) _question; Map<String, Configuration> configurations = _batfish.loadConfigurations(); Set<String> nodes = question.getNodes().getMatchingNodes(_batfish); TableMetadata tableMetadata = createMetadata(question); Multiset<Row> propertyRows = rawAnswer(question, nodes, configurations, tableMetadata.toColumnMap()); TableAnswerElement answer = new TableAnswerElement(tableMetadata); answer.postProcessAnswer(question, propertyRows); return answer; }
@Override public AnswerElement answer() { IpOwnersQuestion question = (IpOwnersQuestion) _question; Map<String, Configuration> configurations = _batfish.loadConfigurations(); Map<Ip, Set<String>> ipNodeOwners = TopologyUtil.computeIpNodeOwners(configurations, false); Map<String, Set<Interface>> interfaces = TopologyUtil.computeNodeInterfaces(configurations); TableAnswerElement answerElement = new TableAnswerElement(getTableMetadata()); answerElement.postProcessAnswer( _question, generateRows(ipNodeOwners, interfaces, question.getDuplicatesOnly())); return answerElement; }
@Override public AnswerElement answer() { PrefixTracerQuestion question = (PrefixTracerQuestion) _question; TableAnswerElement answer = new TableAnswerElement(getTableMetadata()); DataPlane dp = _batfish.loadDataPlane(); SortedMap<String, SortedMap<String, Map<Prefix, Map<String, Set<String>>>>> prefixTracingInfo = dp.getPrefixTracingInfoSummary(); answer.postProcessAnswer( question, getRows(prefixTracingInfo, question.getPrefix(), question.getNodes())); return answer; }
@Override public TableAnswerElement answer() { NodePropertiesQuestion question = (NodePropertiesQuestion) _question; Map<String, Configuration> configurations = _batfish.loadConfigurations(); Set<String> nodes = question.getNodes().getMatchingNodes(_batfish); TableMetadata tableMetadata = createTableMetadata(question); Multiset<Row> propertyRows = getProperties(question.getProperties(), configurations, nodes, tableMetadata.toColumnMap()); TableAnswerElement answer = new TableAnswerElement(tableMetadata); answer.postProcessAnswer(question, propertyRows); return answer; }
@Override public AnswerElement answer() { BgpProcessConfigurationQuestion question = (BgpProcessConfigurationQuestion) _question; Map<String, Configuration> configurations = _batfish.loadConfigurations(); Set<String> nodes = question.getNodes().getMatchingNodes(_batfish); TableMetadata tableMetadata = createTableMetadata(question); TableAnswerElement answer = new TableAnswerElement(tableMetadata); Multiset<Row> propertyRows = getProperties(question.getProperties(), configurations, nodes, tableMetadata.toColumnMap()); answer.postProcessAnswer(question, propertyRows); return answer; }
@Override public AnswerElement answer() { OspfPropertiesQuestion question = (OspfPropertiesQuestion) _question; Map<String, Configuration> configurations = _batfish.loadConfigurations(); Set<String> nodes = question.getNodes().getMatchingNodes(_batfish); TableMetadata tableMetadata = createTableMetadata(question); TableAnswerElement answer = new TableAnswerElement(tableMetadata); Multiset<Row> propertyRows = getProperties(question.getProperties(), configurations, nodes, tableMetadata.toColumnMap()); answer.postProcessAnswer(question, propertyRows); return answer; }
@Override public TableAnswerElement answer() { ConvertConfigurationAnswerElement ccae = _batfish.loadConvertConfigurationAnswerElementOrReparse(); Rows rows = new Rows(); ccae.getConvertStatus() .forEach( (nodeName, nodeStatus) -> { rows.add(getRow(nodeName, nodeStatus)); }); TableAnswerElement answerElement = new TableAnswerElement(TABLE_METADATA); answerElement.postProcessAnswer(_question, rows.getData()); return answerElement; }
@Override public TableAnswerElement answer() { VxlanVniPropertiesQuestion question = (VxlanVniPropertiesQuestion) _question; Map<String, Configuration> configurations = _batfish.loadConfigurations(); Set<String> nodes = question.getNodeSpecifier().resolve(_batfish.specifierContext()); TableMetadata tableMetadata = createTableMetadata(question); TableAnswerElement answer = new TableAnswerElement(tableMetadata); Multiset<Row> propertyRows = getProperties(question.getProperties(), configurations, nodes, tableMetadata.toColumnMap()); answer.postProcessAnswer(question, propertyRows); return answer; }
@Override public AnswerElement answer() { BgpPeerConfigurationQuestion question = (BgpPeerConfigurationQuestion) _question; Map<String, Configuration> configurations = _batfish.loadConfigurations(); Set<String> nodes = question.getNodesSpecifier().resolve(_batfish.specifierContext()); TableMetadata tableMetadata = createTableMetadata(question); TableAnswerElement answer = new TableAnswerElement(tableMetadata); Multiset<Row> propertyRows = getAnswerRows(configurations, nodes, tableMetadata.toColumnMap(), question.getProperties()); answer.postProcessAnswer(question, propertyRows); return answer; }
@Override public TableAnswerElement answer() { ConvertConfigurationAnswerElement ccae = _batfish.loadConvertConfigurationAnswerElementOrReparse(); Map<String, Warnings> warnings = ccae.getWarnings(); Rows rows = new Rows(); warnings.forEach( (nodeName, nodeWarnings) -> { for (Warning w : nodeWarnings.getRedFlagWarnings()) { rows.add(getRow(nodeName, w)); } for (Warning w : nodeWarnings.getUnimplementedWarnings()) { rows.add(getRow(nodeName, w)); } }); TableAnswerElement answerElement = new TableAnswerElement(TABLE_METADATA); answerElement.postProcessAnswer(_question, rows.getData()); return answerElement; }
@Override public AnswerElement answer() { EdgesQuestion question = (EdgesQuestion) _question; Map<String, Configuration> configurations = _batfish.loadConfigurations(); Set<String> includeNodes = question.getNodes().getMatchingNodes(_batfish); Set<String> includeRemoteNodes = question.getRemoteNodes().getMatchingNodes(_batfish); TableAnswerElement answer = new TableAnswerElement(getTableMetadata(question.getEdgeType())); Topology topology = _batfish.getEnvironmentTopology(); answer.postProcessAnswer( _question, generateRows( configurations, topology, includeNodes, includeRemoteNodes, question.getEdgeType())); return answer; }
@Override public TableAnswerElement answer() { InterfacePropertiesQuestion question = (InterfacePropertiesQuestion) _question; Map<String, Configuration> configurations = _batfish.loadConfigurations(); Set<String> nodes = question.getNodes().getMatchingNodes(_batfish); TableMetadata tableMetadata = createTableMetadata(question); TableAnswerElement answer = new TableAnswerElement(tableMetadata); Multiset<Row> propertyRows = getProperties( question.getProperties(), configurations, nodes, question.getInterfaces(), question.getOnlyActive(), tableMetadata.toColumnMap()); answer.postProcessAnswer(question, propertyRows); return answer; }
@Override public AnswerElement answer() { MultipathConsistencyParameters parameters = parameters(); Set<Flow> flows = _batfish.bddMultipathConsistency(parameters); if (_batfish.debugFlagEnabled("oldtraceroute")) { FlowHistory flowHistory = _batfish.flowHistory(flows, false); Multiset<Row> rows = flowHistoryToRows(flowHistory); TableAnswerElement table = new TableAnswerElement(createMetadata(false)); table.postProcessAnswer(_question, rows); return table; } else { SortedMap<Flow, List<Trace>> flowTraces = _batfish.buildFlows(flows, false); TableAnswerElement tableAnswer = new TableAnswerElement(TracerouteAnswerer.metadata(false)); TracerouteAnswerer.flowTracesToRows(flowTraces, parameters.getMaxTraces()) .forEach(tableAnswer::addRow); return tableAnswer; } }