public boolean isMaintainedByRir(final ObjectType objectType, final CIString pkey) { try { switch (objectType) { case AUT_NUM: return autNums.contains(pkey); case INETNUM: { final Ipv4Resource pkeyResource = Ipv4Resource.parse(pkey); if (!inetRanges.findExact(pkeyResource).isEmpty()) { return true; } List<Ipv4Resource> matches = inetRanges.findFirstMoreSpecific(pkeyResource); if (matches.isEmpty()) { return false; } try { Ipv4Resource concatenatedResource = concatenateIpv4Resources(matches); if (concatenatedResource.compareTo(pkeyResource) == 0) { return true; } } catch (IllegalArgumentException ignored) { // empty match or gap in range } return false; } case INET6NUM: { final Ipv6Resource pkeyResource = Ipv6Resource.parse(pkey); if (!inet6Ranges.findExact(pkeyResource).isEmpty()) { return true; } List<Ipv6Resource> matches = inet6Ranges.findFirstMoreSpecific(pkeyResource); if (matches.isEmpty()) { return false; } try { Ipv6Resource concatenatedResource = concatenateIpv6Resources(matches); if (concatenatedResource.compareTo(pkeyResource) == 0) { return true; } } catch (IllegalArgumentException ignored) { // empty match or gap in range } return false; } default: return true; } } catch (IllegalArgumentException ignored) { return false; } }
@Test public void validate_ipv6_domain_success() { when(update.getUpdatedObject()) .thenReturn(RpslObject.parse("" + "domain: 0.0.0.0.8.f.7.0.1.0.0.2.ip6.arpa")); subject.validate(update, updateContext); verify(ipv6DomainTree).findFirstLessSpecific(Ipv6Resource.parse("2001:7f8::/48")); verify(ipv6DomainTree).findFirstMoreSpecific(Ipv6Resource.parse("2001:7f8::/48")); verifyZeroInteractions(ipv4DomainTree); }
public boolean isMaintainedInRirSpace(final ObjectType objectType, final CIString pkey) { try { switch (objectType) { case AUT_NUM: return autNums.contains(pkey); case INETNUM: return !inetRanges.findExactOrFirstLessSpecific(Ipv4Resource.parse(pkey)).isEmpty(); case INET6NUM: return !inet6Ranges.findExactOrFirstLessSpecific(Ipv6Resource.parse(pkey)).isEmpty(); default: return true; } } catch (IllegalArgumentException ignored) { return false; } }
private AuthoritativeResource( final Logger logger, final Set<CIString> autNums, final IntervalMap<Ipv4Resource, Ipv4Resource> inetRanges, final IntervalMap<Ipv6Resource, Ipv6Resource> inet6Ranges) { this.autNums = autNums; this.inetRanges = inetRanges; this.inet6Ranges = inet6Ranges; this.nrInetRanges = inetRanges.findExactAndAllMoreSpecific(Ipv4Resource.parse("0/0")).size(); this.nrInet6Ranges = inet6Ranges.findExactAndAllMoreSpecific(Ipv6Resource.parse("::0/0")).size(); logger.info( "Resources: {}", String.format( "asn: %5d; ipv4: %5d; ipv6: %5d", getNrAutNums(), getNrInetnums(), getNrInet6nums())); }