+ private Eid getPrefix(Eid key, GetPrefixMethods method) {
+ RadixTrie<Object>.TrieNode node = null;
+
+ if (key.getAddress() instanceof Ipv4PrefixBinary) {
+ Ipv4PrefixBinary prefix = (Ipv4PrefixBinary) key.getAddress();
+ switch (method) {
+ case COVERING:
+ node = ip4Trie.lookupCoveringLessSpecific(prefix.getIpv4AddressBinary().getValue(),
+ prefix.getIpv4MaskLength().toJava());
+ break;
+ case PARENT:
+ node = ip4Trie.lookupParent(prefix.getIpv4AddressBinary().getValue(),
+ prefix.getIpv4MaskLength().toJava());
+ break;
+ case SIBLING:
+ node = ip4Trie.lookupSibling(prefix.getIpv4AddressBinary().getValue(),
+ prefix.getIpv4MaskLength().toJava());
+ break;
+ case VIRTUAL_PARENT_SIBLING:
+ node = ip4Trie.lookupVirtualParentSibling(prefix.getIpv4AddressBinary().getValue(),
+ prefix.getIpv4MaskLength().toJava());
+ break;
+ case WIDEST_NEGATIVE:
+ node = ip4Trie.lookupWidestNegative(prefix.getIpv4AddressBinary().getValue(),
+ prefix.getIpv4MaskLength().toJava());
+ break;
+ default:
+ node = null;
+ break;
+ }
+ if (node != null && node.prefix() != null) {
+ return LispAddressUtil.asIpv4PrefixBinaryEid(
+ key.getVirtualNetworkId(), node.prefix(), (short) node.prefixLength());
+ }
+ } else if (key.getAddress() instanceof Ipv6PrefixBinary) {
+ Ipv6PrefixBinary prefix = (Ipv6PrefixBinary) key.getAddress();
+ switch (method) {
+ case COVERING:
+ node = ip6Trie.lookupCoveringLessSpecific(prefix.getIpv6AddressBinary().getValue(),
+ prefix.getIpv6MaskLength().toJava());
+ break;
+ case PARENT:
+ node = ip6Trie.lookupParent(prefix.getIpv6AddressBinary().getValue(),
+ prefix.getIpv6MaskLength().toJava());
+ break;
+ case SIBLING:
+ node = ip6Trie.lookupSibling(prefix.getIpv6AddressBinary().getValue(),
+ prefix.getIpv6MaskLength().toJava());
+ break;
+ case VIRTUAL_PARENT_SIBLING:
+ node = ip6Trie.lookupVirtualParentSibling(prefix.getIpv6AddressBinary().getValue(),
+ prefix.getIpv6MaskLength().toJava());
+ break;
+ case WIDEST_NEGATIVE:
+ node = ip6Trie.lookupWidestNegative(prefix.getIpv6AddressBinary().getValue(),
+ prefix.getIpv6MaskLength().toJava());
+ break;
+ default:
+ node = null;
+ break;
+ }
+ if (node != null && node.prefix() != null) {
+ return LispAddressUtil.asIpv6PrefixBinaryEid(
+ key.getVirtualNetworkId(), node.prefix(), (short) node.prefixLength());
+ }
+ }
+ return null;
+ }
+