+static void
+make_arp_ndp_key (BVT (clib_bihash_kv) * kv, u32 bd, ip_address_t * addr)
+{
+ kv->key[0] = ((u64) bd << 32) | (u32) ip_addr_version (addr);
+ if (ip_addr_version (addr) == AF_IP4)
+ {
+ kv->key[1] = (u64) ip_addr_v4 (addr).as_u32;
+ kv->key[2] = (u64) 0;
+ }
+ else
+ {
+ kv->key[1] = (u64) ip_addr_v6 (addr).as_u64[0];
+ kv->key[2] = (u64) ip_addr_v6 (addr).as_u64[1];
+ }
+}
+
+static void
+make_nsh_key (BVT (clib_bihash_kv) * kv, u32 vni, u32 spi, u8 si)
+{
+ kv->key[0] = (u64) vni;
+ kv->key[1] = (u64) spi;
+ kv->key[2] = (u64) si;
+}
+
+static u64
+arp_ndp_lookup (gid_l2_arp_ndp_table_t * db, u32 bd, ip_address_t * key)
+{
+ int rv;
+ BVT (clib_bihash_kv) kv, value;
+
+ make_arp_ndp_key (&kv, bd, key);
+ rv = BV (clib_bihash_search_inline_2) (&db->arp_ndp_lookup_table, &kv,
+ &value);
+
+ if (rv == 0)
+ return value.value;
+
+ return GID_LOOKUP_MISS_L2;
+}
+
+static u32
+nsh_lookup (gid_nsh_table_t * db, u32 vni, u32 spi, u8 si)
+{
+ int rv;
+ BVT (clib_bihash_kv) kv, value;
+
+ make_nsh_key (&kv, vni, spi, si);
+ rv = BV (clib_bihash_search_inline_2) (&db->nsh_lookup_table, &kv, &value);
+
+ if (rv == 0)
+ return value.value;
+
+ return GID_LOOKUP_MISS;
+}
+
+u64