Moved default flows logic into the PacketManager.

This prevents us duplicating code in each of the apps and allows us to manage
packet requests better in the future.

Change-Id: I5656b2f0f3cecd3e42fe7b4a0a5ab7cb6582bb25
diff --git a/core/api/src/main/java/org/onosproject/net/packet/PacketService.java b/core/api/src/main/java/org/onosproject/net/packet/PacketService.java
index d4780e1..c6d6837 100644
--- a/core/api/src/main/java/org/onosproject/net/packet/PacketService.java
+++ b/core/api/src/main/java/org/onosproject/net/packet/PacketService.java
@@ -15,6 +15,9 @@
  */
 package org.onosproject.net.packet;
 
+import org.onosproject.core.ApplicationId;
+import org.onosproject.net.flow.TrafficSelector;
+
 /**
  * Service for intercepting data plane packets and for emitting synthetic
  * outbound packets.
@@ -35,6 +38,8 @@
      */
     void addProcessor(PacketProcessor processor, int priority);
 
+    // TODO allow processors to register for particular types of packets
+
     /**
      * Removes the specified processor from the processing pipeline.
      *
@@ -43,6 +48,19 @@
     void removeProcessor(PacketProcessor processor);
 
     /**
+     * Requests that packets matching the given selector are punted from the
+     * dataplane to the controller.
+     *
+     * @param selector the traffic selector used to match packets
+     * @param priority the priority of the rule
+     * @param appId the application ID of the requester
+     */
+    void requestPackets(TrafficSelector selector, PacketPriority priority,
+                        ApplicationId appId);
+
+    // TODO add API to allow applications to revoke requests when they deactivate
+
+    /**
      * Emits the specified outbound packet onto the network.
      *
      * @param packet outbound packet