diff --git a/core/api/src/main/java/org/onosproject/net/edge/EdgePortEvent.java b/core/api/src/main/java/org/onosproject/net/edge/EdgePortEvent.java
new file mode 100644
index 0000000..3fe4403
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/edge/EdgePortEvent.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2015 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.edge;
+
+import org.onosproject.event.AbstractEvent;
+import org.onosproject.net.ConnectPoint;
+
+/**
+ * Describes an event pertaining to edge-port inventory.
+ */
+public class EdgePortEvent extends AbstractEvent<EdgePortEvent.Type, ConnectPoint> {
+
+    public enum Type {
+        /**
+         * Signifies that a new edge port was detected.
+         */
+        EDGE_PORT_ADDED,
+
+        /**
+         * Signifies that a new edge port vanished.
+         */
+        EDGE_PORT_REMOVED
+    }
+
+    /**
+     * Creates a new edge port event.
+     *
+     * @param type    event type
+     * @param subject connection point subject
+     */
+    protected EdgePortEvent(Type type, ConnectPoint subject) {
+        super(type, subject);
+    }
+
+    /**
+     * Creates a new edge port event.
+     *
+     * @param type    event type
+     * @param subject connection point subject
+     * @param time    occurrence time
+     */
+    protected EdgePortEvent(Type type, ConnectPoint subject, long time) {
+        super(type, subject, time);
+    }
+
+}
diff --git a/core/api/src/main/java/org/onosproject/net/edge/EdgePortListener.java b/core/api/src/main/java/org/onosproject/net/edge/EdgePortListener.java
new file mode 100644
index 0000000..dae03be
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/edge/EdgePortListener.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2015 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.edge;
+
+import org.onosproject.event.EventListener;
+
+/**
+ * Entity capable of receiving edge port events.
+ */
+public interface EdgePortListener extends EventListener<EdgePortEvent> {
+}
diff --git a/core/api/src/main/java/org/onosproject/net/edge/EdgePortService.java b/core/api/src/main/java/org/onosproject/net/edge/EdgePortService.java
new file mode 100644
index 0000000..44e4b66
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/edge/EdgePortService.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2015 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.edge;
+
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.flow.TrafficTreatment;
+
+import java.nio.ByteBuffer;
+import java.util.Optional;
+
+/**
+ * Service for interacting with an inventory of network edge ports.
+ */
+public interface EdgePortService {
+
+    /**
+     * Indicates whether or not the specified connection point is an edge point.
+     *
+     * @param point connection point
+     * @return true if edge point
+     */
+    boolean isEdgePoint(ConnectPoint point);
+
+    /**
+     * Returns a collection of all edge point within the current topology.
+     *
+     * @return iterable collection of all edge points
+     */
+    Iterable<ConnectPoint> getEdgePoint();
+
+    /**
+     * Returns a collection of all edge point for the specified device.
+     *
+     * @return iterable collection of all edge points for the device
+     */
+    Iterable<ConnectPoint> getEdgePoint(DeviceId deviceId);
+
+    /**
+     * Emits the specified packet, with optional treatment to all edge ports.
+     *
+     * @param data      packet data
+     * @param treatment optional traffic treatment to apply to the packet
+     */
+    void emitPacket(ByteBuffer data, Optional<TrafficTreatment> treatment);
+
+    /**
+     * Emits the specified packet, with optional treatment to all edge ports.
+     *
+     * @param deviceId  device where to send the packet out
+     * @param data      packet data
+     * @param treatment optional traffic treatment to apply to the packet
+     */
+    void emitPacket(DeviceId deviceId, ByteBuffer data,
+                    Optional<TrafficTreatment> treatment);
+
+    /**
+     * Adds a listener for edge port events.
+     *
+     * @param listener listener to be added
+     */
+    void addListener(EdgePortListener listener);
+
+    /**
+     * Removes the listener for edge port events.
+     *
+     * @param listener listener to be removed
+     */
+    void removeListener(EdgePortListener listener);
+
+}
diff --git a/core/api/src/main/java/org/onosproject/net/edge/package-info.java b/core/api/src/main/java/org/onosproject/net/edge/package-info.java
new file mode 100644
index 0000000..d637f19
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/edge/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 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.
+ */
+
+/**
+ * Service for interacting with network edge.
+ */
+package org.onosproject.net.edge;
\ No newline at end of file
