diff --git a/core/api/src/main/java/org/onosproject/cluster/ClusterMetadata.java b/core/api/src/main/java/org/onosproject/cluster/ClusterMetadata.java
index 12db40f..42e6dcc 100644
--- a/core/api/src/main/java/org/onosproject/cluster/ClusterMetadata.java
+++ b/core/api/src/main/java/org/onosproject/cluster/ClusterMetadata.java
@@ -25,11 +25,14 @@
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Verify.verify;
+import static com.google.common.base.Charsets.UTF_8;
 
 import com.google.common.base.MoreObjects;
 import com.google.common.collect.Collections2;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
+import com.google.common.hash.Funnel;
+import com.google.common.hash.PrimitiveSink;
 
 /**
  * Cluster metadata.
@@ -40,14 +43,18 @@
  */
 public final class ClusterMetadata implements Provided {
 
-    // Name to use when the ClusterMetadataService is in transient state
-    public static final String NO_NAME = "";
-
     private final ProviderId providerId;
     private final String name;
     private final Set<ControllerNode> nodes;
     private final Set<Partition> partitions;
 
+    public static final Funnel<ClusterMetadata> HASH_FUNNEL = new Funnel<ClusterMetadata>() {
+        @Override
+        public void funnel(ClusterMetadata cm, PrimitiveSink into) {
+            into.putString(cm.name, UTF_8);
+        }
+    };
+
     @SuppressWarnings("unused")
     private ClusterMetadata() {
         providerId = null;
diff --git a/core/api/src/main/java/org/onosproject/net/link/ProbedLinkProvider.java b/core/api/src/main/java/org/onosproject/net/link/ProbedLinkProvider.java
new file mode 100644
index 0000000..6a04f83
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/link/ProbedLinkProvider.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2014-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.net.link;
+
+import com.google.common.hash.HashFunction;
+import com.google.common.hash.HashCode;
+import com.google.common.hash.Hashing;
+
+import org.onosproject.cluster.ClusterMetadata;
+
+/**
+ * Abstraction for an entity that provides information about infrastructure
+ * links that are discovered or verified using probe messages.
+ */
+public interface ProbedLinkProvider extends LinkProvider {
+
+    static final String DEFAULT_MAC = "DE:AD:BE:EF:BA:11";
+
+    static String defaultMac() {
+        return DEFAULT_MAC;
+    }
+
+    /**
+     * Build a stringified MAC address using the ClusterMetadata hash for uniqueness.
+     * Form of MAC is "02:eb" followed by four bytes of clusterMetadata hash.
+     */
+    static String fingerprintMac(ClusterMetadata cm) {
+        if (cm == null) {
+            return DEFAULT_MAC;
+        }
+
+        HashFunction hf = Hashing.murmur3_32();
+        HashCode hc = hf.newHasher().putObject(cm, ClusterMetadata.HASH_FUNNEL).hash();
+        int unqf = hc.asInt();
+
+        StringBuilder sb = new StringBuilder();
+        sb.append("02:eb");
+        for (int i = 0; i < 4; i++) {
+            byte b = (byte) (unqf >> i * 8);
+            sb.append(String.format(":%02X", b));
+        }
+        return sb.toString();
+    }
+}
diff --git a/core/api/src/test/java/org/onosproject/cluster/ClusterMetadataServiceAdapter.java b/core/api/src/test/java/org/onosproject/cluster/ClusterMetadataServiceAdapter.java
new file mode 100644
index 0000000..f2dbbe3
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/cluster/ClusterMetadataServiceAdapter.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2014-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.cluster;
+
+import org.onlab.packet.IpAddress;
+
+import com.google.common.collect.Sets;
+
+/**
+ * Test adapter for the ClusterMetadata service.
+ */
+public class ClusterMetadataServiceAdapter implements ClusterMetadataService {
+
+    @Override
+    public ClusterMetadata getClusterMetadata() {
+        final NodeId nid = new NodeId("test-node");
+        final IpAddress addr = IpAddress.valueOf(0);
+        final Partition p = new DefaultPartition(PartitionId.from(1), Sets.newHashSet(nid));
+        return new ClusterMetadata("test-cluster",
+                                   Sets.newHashSet(new DefaultControllerNode(nid, addr)),
+                                   Sets.newHashSet(p));
+    }
+
+    @Override
+    public ControllerNode getLocalNode() {
+        return null;
+    }
+
+    @Override
+    public void addListener(ClusterMetadataEventListener listener) {
+    }
+
+    @Override
+    public void removeListener(ClusterMetadataEventListener listener) {
+    }
+
+}
