Sketched out packet service and related abstractions.
diff --git a/core/api/src/main/java/org/onlab/onos/net/packet/PacketContext.java b/core/api/src/main/java/org/onlab/onos/net/packet/PacketContext.java
new file mode 100644
index 0000000..a9af312
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/net/packet/PacketContext.java
@@ -0,0 +1,55 @@
+package org.onlab.onos.net.packet;
+
+/**
+ * Represents context for processing an inbound packet, and (optionally)
+ * emitting a corresponding outbound packet.
+ */
+public interface PacketContext {
+
+    /**
+     * Returns the time when the packet was received.
+     *
+     * @return the time in millis since start of epoch
+     */
+    long time();
+
+    /**
+     * Returns the inbound packet being processed.
+     *
+     * @return inbound packet
+     */
+    InboundPacket inPacket();
+
+    /**
+     * Returns the view of the outbound packet.
+     *
+     * @return outbound packet
+     */
+    OutboundPacket outPacket();
+
+    /**
+     * Appends a new treatment to be applied to the outbound packet.
+     *
+     * @param treatment output treatment
+     */
+    void appendTreatment(Treatment treatment);
+
+    /**
+     * Triggers the outbound packet to be sent.
+     */
+    void send();
+
+    /**
+     * Blocks the outbound packet from being sent from this point onward.
+     */
+    void block();
+
+    /**
+     * Indicates whether the packet has already been handled, i.e. sent or
+     * blocked.
+     *
+     * @return true if sent or blocked
+     */
+    boolean isHandled();
+
+}