Formalized HostStore in preparation for separating managers and stores.
diff --git a/core/api/src/main/java/org/onlab/onos/net/host/HostStore.java b/core/api/src/main/java/org/onlab/onos/net/host/HostStore.java
new file mode 100644
index 0000000..cb5ed64
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/net/host/HostStore.java
@@ -0,0 +1,102 @@
+package org.onlab.onos.net.host;
+
+import org.onlab.onos.net.ConnectPoint;
+import org.onlab.onos.net.DeviceId;
+import org.onlab.onos.net.Host;
+import org.onlab.onos.net.HostId;
+import org.onlab.onos.net.provider.ProviderId;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
+
+import java.util.Set;
+
+/**
+ * Manages inventory of end-station hosts. It may do so using whatever
+ * means are appropriate.
+ */
+public interface HostStore {
+
+    /**
+     * Creates a new host or updates the existing one based on the specified
+     * description.
+     *
+     * @param providerId      provider identification
+     * @param hostId          host identification
+     * @param hostDescription host description data
+     * @return appropriate event or null if no change resulted
+     */
+    HostEvent createOrUpdateHost(ProviderId providerId, HostId hostId,
+                                 HostDescription hostDescription);
+
+    /**
+     * Removes the specified host from the inventory.
+     *
+     * @param hostId host identification
+     * @return remove event or null if host was not found
+     */
+    HostEvent removeHost(HostId hostId);
+
+    /**
+     * Returns the number of hosts in the store.
+     *
+     * @return host count
+     */
+    int getHostCount();
+
+    /**
+     * Returns a collection of all hosts in the store.
+     *
+     * @return iterable collection of all hosts
+     */
+    Iterable<Host> getHosts();
+
+    /**
+     * Returns the host with the specified identifer.
+     *
+     * @param hostId host identification
+     * @return host or null if not found
+     */
+    Host getHost(HostId hostId);
+
+    /**
+     * Returns the set of all hosts within the specified VLAN.
+     *
+     * @param vlanId vlan id
+     * @return set of hosts in the vlan
+     */
+    Set<Host> getHosts(VlanId vlanId);
+
+    /**
+     * Returns the set of hosts with the specified MAC address.
+     *
+     * @param mac mac address
+     * @return set of hosts with the given mac
+     */
+    Set<Host> getHosts(MacAddress mac);
+
+    /**
+     * Returns the set of hosts with the specified IP address.
+     *
+     * @param ip ip address
+     * @return set of hosts with the given IP
+     */
+    Set<Host> getHosts(IpAddress ip);
+
+    /**
+     * Returns the set of hosts whose location falls on the given connection point.
+     *
+     * @param connectPoint connection point
+     * @return set of hosts
+     */
+    Set<Host> getConnectedHosts(ConnectPoint connectPoint);
+
+    /**
+     * Returns the set of hosts whose location falls on the given device.
+     *
+     * @param deviceId infrastructure device identifier
+     * @return set of hosts
+     */
+    Set<Host> getConnectedHosts(DeviceId deviceId);
+
+}