diff --git a/net/api/src/main/java/net/onrc/onos/api/Description.java b/net/api/src/main/java/net/onrc/onos/api/Description.java
new file mode 100644
index 0000000..8a3c127
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/Description.java
@@ -0,0 +1,7 @@
+package net.onrc.onos.api;
+
+/**
+ * Base abstraction of a piece of information about network elements.
+ */
+public interface Description {
+}
diff --git a/net/api/src/main/java/net/onrc/onos/api/DeviceId.java b/net/api/src/main/java/net/onrc/onos/api/DeviceId.java
new file mode 100644
index 0000000..2210742
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/DeviceId.java
@@ -0,0 +1,25 @@
+package net.onrc.onos.api;
+
+import java.net.URI;
+
+/**
+ * Immutable representaion of a device identity.
+ */
+public class DeviceId {
+
+    private final URI uri;
+
+    public DeviceId(URI uri) {
+        this.uri = uri;
+    }
+
+    /**
+     * Returns the backing URI.
+     *
+     * @return backing device URI
+     */
+    public URI uri() {
+        return uri;
+    }
+
+}
diff --git a/net/api/src/main/java/net/onrc/onos/api/PortNumber.java b/net/api/src/main/java/net/onrc/onos/api/PortNumber.java
new file mode 100644
index 0000000..9a6dddd
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/PortNumber.java
@@ -0,0 +1,7 @@
+package net.onrc.onos.api;
+
+/**
+ * Representation of a port number.
+ */
+public interface PortNumber {
+}
diff --git a/net/api/src/main/java/net/onrc/onos/api/Provider.java b/net/api/src/main/java/net/onrc/onos/api/Provider.java
new file mode 100644
index 0000000..1b38cf4
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/Provider.java
@@ -0,0 +1,10 @@
+package net.onrc.onos.api;
+
+/**
+ * Abstraction of a provider of information about network environment.
+ */
+public interface Provider {
+
+    ProviderId id();
+
+}
diff --git a/net/api/src/main/java/net/onrc/onos/api/ProviderBroker.java b/net/api/src/main/java/net/onrc/onos/api/ProviderBroker.java
new file mode 100644
index 0000000..ef2d4dc
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/ProviderBroker.java
@@ -0,0 +1,27 @@
+package net.onrc.onos.api;
+
+/**
+ * Broker used for registering/unregistering information providers with the core.
+ *
+ * @param <T> type of the information provider
+ * @param <S> type of the provider service
+ */
+public interface ProviderBroker<T extends Provider, S extends ProviderService> {
+
+    /**
+     * Registers the supplied provider with the core.
+     *
+     * @param provider provider to be registered
+     * @return provider service for injecting information into core
+     */
+    S register(T provider);
+
+    /**
+     * Unregisters the supplied provider. As a result the previously issued
+     * provider service will be invalidated.
+     *
+     * @param provider provider to be unregistered
+     */
+    void unregister(T provider);
+
+}
diff --git a/net/api/src/main/java/net/onrc/onos/api/ProviderId.java b/net/api/src/main/java/net/onrc/onos/api/ProviderId.java
new file mode 100644
index 0000000..3f29bac
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/ProviderId.java
@@ -0,0 +1,43 @@
+package net.onrc.onos.api;
+
+/**
+ * Notion of provider identity.
+ */
+public class ProviderId {
+
+    private final String id;
+
+    public ProviderId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        ProviderId that = (ProviderId) o;
+
+        if (!id.equals(that.id)) {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        return id.hashCode();
+    }
+
+    @Override
+    public String toString() {
+        return "ProviderId{" +
+                "id='" + id + '\'' +
+                '}';
+    }
+}
diff --git a/net/api/src/main/java/net/onrc/onos/api/ProviderService.java b/net/api/src/main/java/net/onrc/onos/api/ProviderService.java
new file mode 100644
index 0000000..add3366
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/ProviderService.java
@@ -0,0 +1,8 @@
+package net.onrc.onos.api;
+
+/**
+ * Abstraction of a service through which providers can inject information
+ * about the network environment into the core.
+ */
+public interface ProviderService {
+}
diff --git a/net/api/src/main/java/net/onrc/onos/api/device/DeviceDescription.java b/net/api/src/main/java/net/onrc/onos/api/device/DeviceDescription.java
new file mode 100644
index 0000000..ef9a694
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/device/DeviceDescription.java
@@ -0,0 +1,21 @@
+package net.onrc.onos.api.device;
+
+import net.onrc.onos.api.Description;
+
+import java.net.URI;
+
+/**
+ * Carrier of immutable information about a device.
+ */
+public interface DeviceDescription extends Description {
+
+    /**
+     * Protocol/provider specific URI that can be used to encode the identity
+     * information required to communicate with the device externally, e.g.
+     * datapath ID.
+     *
+     * @return provider specific URI for the device
+     */
+    URI deviceURI();
+
+}
\ No newline at end of file
diff --git a/net/api/src/main/java/net/onrc/onos/api/device/DeviceProvider.java b/net/api/src/main/java/net/onrc/onos/api/device/DeviceProvider.java
new file mode 100644
index 0000000..c93cab5
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/device/DeviceProvider.java
@@ -0,0 +1,9 @@
+package net.onrc.onos.api.device;
+
+import net.onrc.onos.api.Provider;
+
+/**
+ * Abstraction of a device information provider.
+ */
+public interface DeviceProvider extends Provider {
+}
diff --git a/net/api/src/main/java/net/onrc/onos/api/device/DeviceProviderBroker.java b/net/api/src/main/java/net/onrc/onos/api/device/DeviceProviderBroker.java
new file mode 100644
index 0000000..fdbe322
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/device/DeviceProviderBroker.java
@@ -0,0 +1,10 @@
+package net.onrc.onos.api.device;
+
+import net.onrc.onos.api.ProviderBroker;
+
+/**
+ * Abstraction of a device provider brokerage.
+ */
+public interface DeviceProviderBroker
+        extends ProviderBroker<DeviceProvider, DeviceProviderService> {
+}
diff --git a/net/api/src/main/java/net/onrc/onos/api/device/DeviceProviderService.java b/net/api/src/main/java/net/onrc/onos/api/device/DeviceProviderService.java
new file mode 100644
index 0000000..b0a33a6
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/device/DeviceProviderService.java
@@ -0,0 +1,44 @@
+package net.onrc.onos.api.device;
+
+import net.onrc.onos.api.ProviderService;
+
+import java.util.List;
+
+/**
+ * Service through which device providers can inject device information into
+ * the core.
+ */
+public interface DeviceProviderService extends ProviderService {
+
+    // TODO: define suspend and remove actions on the mezzanine administrative API
+
+    /**
+     * Signals the core that a device has connected or has been detected somehow.
+     *
+     * @param deviceDescription information about network device
+     */
+    void deviceConnected(DeviceDescription deviceDescription);
+
+    /**
+     * Signals the core that a device has disconnected or is no longer reachable.
+     *
+     * @param deviceDescription device to be removed
+     */
+    void deviceDisconnected(DeviceDescription deviceDescription);
+
+    /**
+     * Sends information about all ports of a device. It is up to the core to
+     * determine what has changed.
+     *
+     * @param ports list of device ports
+     */
+    void updatePorts(List<PortDescription> ports);
+
+    /**
+     * Used to notify the core about port status change of a single port.
+     *
+     * @param port description of the port that changed
+     */
+    void portStatusChanged(PortDescription port);
+
+}
diff --git a/net/api/src/main/java/net/onrc/onos/api/device/PortDescription.java b/net/api/src/main/java/net/onrc/onos/api/device/PortDescription.java
new file mode 100644
index 0000000..9f5db2a
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/device/PortDescription.java
@@ -0,0 +1,10 @@
+package net.onrc.onos.api.device;
+
+/**
+ * Information about a port.
+ */
+public interface PortDescription {
+
+    // TODO: possibly relocate this to a common ground so that this can also used by host tracking if required
+
+}
diff --git a/net/api/src/main/java/net/onrc/onos/api/host/HostDescription.java b/net/api/src/main/java/net/onrc/onos/api/host/HostDescription.java
new file mode 100644
index 0000000..a397155
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/host/HostDescription.java
@@ -0,0 +1,11 @@
+package net.onrc.onos.api.host;
+
+/**
+ * Information describing host and its location.
+ */
+public interface HostDescription {
+
+    // IP, MAC, VLAN-ID, HostLocation -> (ConnectionPoint + timestamp)
+    
+
+}
diff --git a/net/api/src/main/java/net/onrc/onos/api/host/HostProvider.java b/net/api/src/main/java/net/onrc/onos/api/host/HostProvider.java
new file mode 100644
index 0000000..f05e26d
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/host/HostProvider.java
@@ -0,0 +1,9 @@
+package net.onrc.onos.api.host;
+
+import net.onrc.onos.api.Provider;
+
+/**
+ * Provider of information about hosts and their location on the network.
+ */
+public interface HostProvider extends Provider {
+}
diff --git a/net/api/src/main/java/net/onrc/onos/api/host/HostProviderBroker.java b/net/api/src/main/java/net/onrc/onos/api/host/HostProviderBroker.java
new file mode 100644
index 0000000..c799b20
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/host/HostProviderBroker.java
@@ -0,0 +1,10 @@
+package net.onrc.onos.api.host;
+
+import net.onrc.onos.api.ProviderBroker;
+
+/**
+ * Abstraction of a host provider brokerage.
+ */
+public interface HostProviderBroker
+        extends ProviderBroker<HostProvider, HostProviderService> {
+}
diff --git a/net/api/src/main/java/net/onrc/onos/api/host/HostProviderService.java b/net/api/src/main/java/net/onrc/onos/api/host/HostProviderService.java
new file mode 100644
index 0000000..662ba75
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/host/HostProviderService.java
@@ -0,0 +1,12 @@
+package net.onrc.onos.api.host;
+
+import net.onrc.onos.api.ProviderService;
+
+/**
+ * Means of conveying host information to the core.
+ */
+public interface HostProviderService extends ProviderService {
+    
+    void hostDetected(HostDescription hostDescription);
+
+}
diff --git a/net/api/src/main/java/net/onrc/onos/api/link/LinkDescription.java b/net/api/src/main/java/net/onrc/onos/api/link/LinkDescription.java
new file mode 100644
index 0000000..c40f522
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/link/LinkDescription.java
@@ -0,0 +1,17 @@
+package net.onrc.onos.api.link;
+
+/**
+ * Describes an infrastructure link.
+ */
+public interface LinkDescription {
+
+    // TODO: src, dst connection points, which are pairs of (DeviceId, PortNumber)
+
+//    On the north:
+//    Link = (ConnectPoint src, ConnectPoint dst);
+//    ConnectPoint = (DeviceId, PortNumber);
+
+//    On the south
+//    LinkDescription ~ Link
+
+}
diff --git a/net/api/src/main/java/net/onrc/onos/api/link/LinkProvider.java b/net/api/src/main/java/net/onrc/onos/api/link/LinkProvider.java
new file mode 100644
index 0000000..4d7ab86
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/link/LinkProvider.java
@@ -0,0 +1,10 @@
+package net.onrc.onos.api.link;
+
+import net.onrc.onos.api.Provider;
+
+/**
+ * Abstraction of an entity providing information about infrastructure links
+ * to the core.
+ */
+public interface LinkProvider extends Provider {
+}
diff --git a/net/api/src/main/java/net/onrc/onos/api/link/LinkProviderBroker.java b/net/api/src/main/java/net/onrc/onos/api/link/LinkProviderBroker.java
new file mode 100644
index 0000000..8da7bab
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/link/LinkProviderBroker.java
@@ -0,0 +1,10 @@
+package net.onrc.onos.api.link;
+
+import net.onrc.onos.api.ProviderBroker;
+
+/**
+ * Abstraction of an infrastructure link provider brokerage.
+ */
+public interface LinkProviderBroker
+        extends ProviderBroker<LinkProvider, LinkProviderService> {
+}
diff --git a/net/api/src/main/java/net/onrc/onos/api/link/LinkProviderService.java b/net/api/src/main/java/net/onrc/onos/api/link/LinkProviderService.java
new file mode 100644
index 0000000..23fced8
--- /dev/null
+++ b/net/api/src/main/java/net/onrc/onos/api/link/LinkProviderService.java
@@ -0,0 +1,24 @@
+package net.onrc.onos.api.link;
+
+import net.onrc.onos.api.ProviderService;
+
+/**
+ * Means for injecting link information into the core.
+ */
+public interface LinkProviderService extends ProviderService {
+
+    /**
+     * Signals that an infrastructure link has been connected.
+     *
+     * @param linkDescription link information
+     */
+    void linkConnected(LinkDescription linkDescription);
+
+    /**
+     * Signals that an infrastructure link has been disconnected.
+     *
+     * @param linkDescription link information
+     */
+    void linkDisconnected(LinkDescription linkDescription);
+
+}
