@JsonCreator public MultipathConsistencyQuestion( @Nullable @JsonProperty(PROP_HEADERS) PacketHeaderConstraints headerConstraints, @Nullable @JsonProperty(PROP_MAX_TRACES) Integer maxTraces, @Nullable @JsonProperty(PROP_PATH_CONSTRAINTS) PathConstraintsInput pathConstraints) { setDifferential(false); _headerConstraints = firstNonNull(headerConstraints, PacketHeaderConstraints.unconstrained()); _maxTraces = firstNonNull(maxTraces, DEFAULT_MAX_TRACES); _pathConstraints = firstNonNull(pathConstraints, PathConstraintsInput.unconstrained()); }
@JsonCreator public DifferentialReachabilityQuestion( @Nullable @JsonProperty(PROP_ACTIONS) DispositionSpecifier actions, @Nullable @JsonProperty(PROP_HEADERS) PacketHeaderConstraints headerConstraints, @Nullable @JsonProperty(PROP_IGNORE_FILTERS) Boolean ignoreFilters, @Nullable @JsonProperty(PROP_INVERT_SEARCH) Boolean invertSearch, @Nullable @JsonProperty(PROP_MAX_TRACES) Integer maxTraces, @Nullable @JsonProperty(PROP_PATH_CONSTRAINTS) PathConstraintsInput pathConstraints) { setDifferential(true); _actions = firstNonNull(actions, SUCCESS_SPECIFIER); _headerConstraints = firstNonNull(headerConstraints, PacketHeaderConstraints.unconstrained()); _ignoreFilters = firstNonNull(ignoreFilters, false); _invertSearch = firstNonNull(invertSearch, false); _maxTraces = firstNonNull(maxTraces, DEFAULT_MAX_TRACES); _pathConstraints = firstNonNull(pathConstraints, PathConstraintsInput.unconstrained()); }
/** * Create a new reachability question. {@code null} values result in default parameter values. * * @param actions set of actions/flow dispositions to search for (default is {@code success}) * @param headerConstraints header constraints that constrain the search space of valid flows. * Default is unconstrained. * @param ignoreFilters whether to ignore ingress and egress ACLs. * @param pathConstraints path constraints dictating where a flow can originate/terminate/transit. * Default is unconstrained. */ @JsonCreator public SpecifiersReachabilityQuestion( @Nullable @JsonProperty(PROP_ACTIONS) DispositionSpecifier actions, @Nullable @JsonProperty(PROP_HEADER_CONSTRAINT) PacketHeaderConstraints headerConstraints, @Nullable @JsonProperty(PROP_IGNORE_FILTERS) Boolean ignoreFilters, @Nullable @JsonProperty(PROP_INVERT_SEARCH) Boolean invertSearch, @Nullable @JsonProperty(PROP_MAX_TRACES) Integer maxTraces, @Nullable @JsonProperty(PROP_PATH_CONSTRAINT) PathConstraintsInput pathConstraints) { _actions = firstNonNull(actions, DispositionSpecifier.SUCCESS_SPECIFIER); _headerConstraints = firstNonNull(headerConstraints, PacketHeaderConstraints.unconstrained()); _ignoreFilters = firstNonNull(ignoreFilters, false); _invertSearch = firstNonNull(invertSearch, false); _maxTraces = firstNonNull(maxTraces, TracePruner.DEFAULT_MAX_TRACES); _pathConstraints = firstNonNull(pathConstraints, PathConstraintsInput.unconstrained()); }
@Test public void testDefaults() { PathConstraintsInput pci = PathConstraintsInput.unconstrained(); assertThat(pci.getStartLocation(), nullValue()); assertThat(pci.getEndLocation(), nullValue()); assertThat(pci.getTransitLocations(), nullValue()); assertThat(pci.getForbiddenLocations(), nullValue()); } }
@Test public void testHeaderSpaceConstraint2() throws IOException { Question question = new DifferentialReachabilityQuestion( new DispositionSpecifier(ImmutableSet.of(FlowDisposition.ACCEPTED)), PacketHeaderConstraints.builder().setDstIp("5.5.5.5").build(), false, false, TracePruner.DEFAULT_MAX_TRACES, PathConstraintsInput.unconstrained()); Batfish batfish = initBatfish(); TableAnswerElement answer = new DifferentialReachabilityAnswerer(question, batfish).answer(); assertThat(answer.getRows().size(), equalTo(0)); } }
false, TracePruner.DEFAULT_MAX_TRACES, PathConstraintsInput.unconstrained()); Batfish batfish = initBatfish(); TableAnswerElement answer = new DifferentialReachabilityAnswerer(question, batfish).answer();
false, TracePruner.DEFAULT_MAX_TRACES, PathConstraintsInput.unconstrained());