Merge branch 'master' of ssh://gerrit.onlab.us:29418/onos-next
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/Criteria.java b/core/api/src/main/java/org/onlab/onos/net/flow/Criteria.java
index 9595797..4717cc4 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/Criteria.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/Criteria.java
@@ -20,6 +20,18 @@
         return null;
     }
 
+    /**
+     * Creates a match on ETH_DST field using the specified value. This value
+     * may be a wildcard mask.
+     *
+     * @param macValue MAC address value or wildcard mask
+     * @return match criterion
+     */
+    public static Criterion matchEthDst(MACValue macValue) {
+        return null;
+    }
+
+
     // Dummy to illustrate the concept for now; delete ASAP
     private static class MACValue { }
 }
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/FlowRule.java b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRule.java
index 7204745..5f44630 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/FlowRule.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRule.java
@@ -2,14 +2,14 @@
 
 import org.onlab.onos.net.DeviceId;
 
-import java.util.List;
-
 /**
  * Represents a generalized match & action pair to be applied to
  * an infrastucture device.
  */
 public interface FlowRule {
 
+    //TODO: build cookie value
+
     /**
      * Returns the flow rule priority given in natural order; higher numbers
      * mean higher priorities.
@@ -38,6 +38,6 @@
      *
      * @return traffic treatment
      */
-    List<Treatment> treatments();
+    TrafficTreatment treatment();
 
 }
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderService.java b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderService.java
index 76689c2..661b195 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderService.java
@@ -22,4 +22,11 @@
      */
     void flowMissing(FlowRule flowRule);
 
+    /**
+     * Signals that a flow rule was indeed added.
+     *
+     * @param flowRule the added flow rule
+     */
+    void flowAdded(FlowRule flowRule);
+
 }
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleService.java b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleService.java
index ccb6a51..724051f 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleService.java
@@ -26,6 +26,15 @@
     void applyFlowRules(FlowRule... flowRules);
 
     /**
+     * Removes the specified flow rules from their respective devices.
+     *
+     * @param flowRules one or more flow rules
+     * throws SomeKindOfException that indicates which ones were removed and
+     *                  which ones failed
+     */
+    void removeFlowRules(FlowRule... flowRules);
+
+    /**
      * Adds the specified flow rule listener.
      *
      * @param listener flow rule listener
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/TrafficSelector.java b/core/api/src/main/java/org/onlab/onos/net/flow/TrafficSelector.java
index c024e9c..9678dc1 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/TrafficSelector.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/TrafficSelector.java
@@ -24,8 +24,9 @@
          * already been added, it will be replaced by this one.
          *
          * @param criterion new criterion
+         * @return self
          */
-        void add(Criterion criterion);
+        Builder add(Criterion criterion);
 
         /**
          * Builds an immutable traffic selector.
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/TrafficTreatment.java b/core/api/src/main/java/org/onlab/onos/net/flow/TrafficTreatment.java
index 0eb5299..b8b9c10 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/TrafficTreatment.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/TrafficTreatment.java
@@ -25,7 +25,7 @@
          *
          * @param instruction new instruction
          */
-        void add(Instruction instruction);
+        Builder add(Instruction instruction);
 
         /**
          * Builds an immutable traffic treatment descriptor.
diff --git a/core/api/src/main/java/org/onlab/onos/net/packet/PacketProcessor.java b/core/api/src/main/java/org/onlab/onos/net/packet/PacketProcessor.java
index a53a08c..fc77c94 100644
--- a/core/api/src/main/java/org/onlab/onos/net/packet/PacketProcessor.java
+++ b/core/api/src/main/java/org/onlab/onos/net/packet/PacketProcessor.java
@@ -1,10 +1,15 @@
 package org.onlab.onos.net.packet;
 
+
 /**
  * Abstraction of an inbound packet processor.
  */
 public interface PacketProcessor {
 
+    public static final int ADVISOR_MAX = Integer.MAX_VALUE / 3;
+    public static final int DIRECTOR_MAX = (Integer.MAX_VALUE / 3) * 2;
+    public static final int OBSERVER_MAX = Integer.MAX_VALUE;
+
     /**
      * Processes the inbound packet as specified in the given context.
      *
diff --git a/core/api/src/main/java/org/onlab/onos/net/packet/PacketProvider.java b/core/api/src/main/java/org/onlab/onos/net/packet/PacketProvider.java
index 14597ee..738c801 100644
--- a/core/api/src/main/java/org/onlab/onos/net/packet/PacketProvider.java
+++ b/core/api/src/main/java/org/onlab/onos/net/packet/PacketProvider.java
@@ -1,9 +1,11 @@
 package org.onlab.onos.net.packet;
 
+import org.onlab.onos.net.provider.Provider;
+
 /**
  * Abstraction of a packet provider capable of emitting packets.
  */
-public interface PacketProvider {
+public interface PacketProvider extends Provider{
 
     /**
      * Emits the specified outbound packet onto the network.
diff --git a/core/api/src/main/java/org/onlab/onos/net/packet/PacketProviderRegistry.java b/core/api/src/main/java/org/onlab/onos/net/packet/PacketProviderRegistry.java
new file mode 100644
index 0000000..86df510
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/net/packet/PacketProviderRegistry.java
@@ -0,0 +1,10 @@
+package org.onlab.onos.net.packet;
+
+import org.onlab.onos.net.provider.ProviderRegistry;
+
+/**
+ * Abstraction of an infrastructure packet provider registry.
+ */
+public interface PacketProviderRegistry
+extends ProviderRegistry<PacketProvider, PacketProviderService> {
+}
diff --git a/core/api/src/main/java/org/onlab/onos/net/packet/PacketProviderService.java b/core/api/src/main/java/org/onlab/onos/net/packet/PacketProviderService.java
index 1b58f3e..217ce1f 100644
--- a/core/api/src/main/java/org/onlab/onos/net/packet/PacketProviderService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/packet/PacketProviderService.java
@@ -1,9 +1,11 @@
 package org.onlab.onos.net.packet;
 
+import org.onlab.onos.net.provider.ProviderService;
+
 /**
  * Entity capable of processing inbound packets.
  */
-public interface PacketProviderService {
+public interface PacketProviderService extends ProviderService<PacketProvider>{
 
     /**
      * Submits inbound packet context for processing. This processing will be
diff --git a/core/api/src/main/java/org/onlab/onos/net/packet/PacketService.java b/core/api/src/main/java/org/onlab/onos/net/packet/PacketService.java
index 5debf1b..d2db536 100644
--- a/core/api/src/main/java/org/onlab/onos/net/packet/PacketService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/packet/PacketService.java
@@ -18,7 +18,7 @@
      * @throws java.lang.IllegalArgumentException if a processor with the
      *                                            given priority already exists
      */
-    void addProcessor(PacketProcessor processor, long priority);
+    void addProcessor(PacketProcessor processor, int priority);
 
     /**
      * Removes the specified processor from the processing pipeline.