Add parent prefix lookup methods to RadixTrie and HashMapDb
[lispflowmapping.git] / mappingservice / inmemorydb / src / main / java / org / opendaylight / lispflowmapping / inmemorydb / HashMapDb.java
index 3e41dbf16ad3665e47090528fd2fa443c47b4710..5833592cfccded1a2d89119e9d2ac70c04ac37d6 100644 (file)
@@ -121,6 +121,26 @@ public class HashMapDb implements ILispDAO, AutoCloseable {
         }
     }
 
+    @Override
+    public Eid getParentPrefix(Eid key) {
+        RadixTrie<Object>.TrieNode node = null;
+
+        if (key.getAddress() instanceof Ipv4PrefixBinary) {
+            Ipv4PrefixBinary prefix = (Ipv4PrefixBinary) key.getAddress();
+            node = ip4Trie.lookupParent(prefix.getIpv4AddressBinary().getValue(), prefix.getIpv4MaskLength());
+            if (node != null) {
+                return LispAddressUtil.asIpv4PrefixBinaryEid(key, node.prefix(), (short) node.prefixLength());
+            }
+        } else if (key.getAddress() instanceof Ipv6PrefixBinary) {
+            Ipv6PrefixBinary prefix = (Ipv6PrefixBinary) key.getAddress();
+            node = ip6Trie.lookupParent(prefix.getIpv6AddressBinary().getValue(), prefix.getIpv6MaskLength());
+            if (node != null) {
+                return LispAddressUtil.asIpv6PrefixBinaryEid(key, node.prefix(), (short) node.prefixLength());
+            }
+        }
+        return null;
+    }
+
     @Override
     public Eid getWidestNegativePrefix(Eid key) {
         RadixTrie<Object>.TrieNode node = null;