if (IpConversionUtil.isIpv6ArbitraryBitMask(mask)) {
setArbitraryMatch(builder, address, mask);
} else {
- setPrefixMatch(builder, address, mask, hasMask);
+ setPrefixMatch(builder, address, mask);
}
} else {
- setPrefixMatch(builder, address, null, hasMask);
+ setPrefixMatch(builder, address, null);
}
}
- private static void setPrefixMatch(final MatchBuilder builder, final Ipv6Address address,
- final byte[] mask, final boolean hasMask) {
- if (hasMask) {
- if (Objects.isNull(builder.getLayer3Match())) {
- builder.setLayer3Match(new Ipv6MatchBuilder()
- .setIpv6Source(IpConversionUtil.createPrefix(address, mask))
- .build());
- } else if (Ipv6Match.class.isInstance(builder.getLayer3Match())) {
- builder.setLayer3Match(new Ipv6MatchBuilder(Ipv6Match.class.cast(builder.getLayer3Match()))
- .setIpv6Source(IpConversionUtil.createPrefix(address, mask))
- .setIpv6Destination(Ipv6Match.class.cast(builder.getLayer3Match()).getIpv6Destination())
- .build());
- } else {
- throwErrorOnMalformed(builder, "layer3Match");
- }
+ private static void setPrefixMatch(final MatchBuilder builder, final Ipv6Address address, final byte[] mask) {
+ if (Objects.isNull(builder.getLayer3Match())) {
+ builder.setLayer3Match(new Ipv6MatchBuilder()
+ .setIpv6Source(IpConversionUtil.createPrefix(address, mask))
+ .build());
+ } else if (Ipv6Match.class.isInstance(builder.getLayer3Match())
+ && Objects.isNull(Ipv6Match.class.cast(builder.getLayer3Match()).getIpv6Source())) {
+ builder.setLayer3Match(new Ipv6MatchBuilder(Ipv6Match.class.cast(builder.getLayer3Match()))
+ .setIpv6Source(IpConversionUtil.createPrefix(address, mask))
+ .build());
} else {
- if (Objects.isNull(builder.getLayer3Match())) {
- builder.setLayer3Match(new Ipv6MatchBuilder()
- .setIpv6Source(IpConversionUtil.createPrefix(address))
- .build());
- } else if (Ipv6Match.class.isInstance(builder.getLayer3Match())) {
- builder.setLayer3Match(new Ipv6MatchBuilder(Ipv6Match.class.cast(builder.getLayer3Match()))
- .setIpv6Source(IpConversionUtil.createPrefix(address))
- .build());
- } else {
- throwErrorOnMalformed(builder, "layer3Match");
- }
+ throwErrorOnMalformed(builder, "layer3Match", "ipv6Source");
}
}
.setIpv6SourceAddressNoMask(address)
.setIpv6SourceArbitraryBitmask(IpConversionUtil.createIpv6ArbitraryBitMask(mask))
.build());
- } else if (Ipv6MatchArbitraryBitMask.class.isInstance(builder.getLayer3Match())) {
+ } else if (Ipv6MatchArbitraryBitMask.class.isInstance(builder.getLayer3Match())
+ && Objects.isNull(Ipv6MatchArbitraryBitMask.class.cast(builder.getLayer3Match()).getIpv6SourceAddressNoMask())) {
final Ipv6MatchArbitraryBitMask match = Ipv6MatchArbitraryBitMask.class.cast(builder.getLayer3Match());
builder.setLayer3Match(new Ipv6MatchArbitraryBitMaskBuilder(match)
.setIpv6SourceAddressNoMask(address)
.setIpv6SourceArbitraryBitmask(IpConversionUtil.createIpv6ArbitraryBitMask(mask))
.build());
} else {
- throwErrorOnMalformed(builder, "layer3Match");
+ throwErrorOnMalformed(builder, "layer3Match", "ipv6SourceAddressNoMask");
}
}