olt installs default rules on startup and when a port shows up

Change-Id: I0db62db020f94500aeae7191f7681745e1268672
diff --git a/drivers/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java b/drivers/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java
index e4b50a1..8980733 100644
--- a/drivers/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java
+++ b/drivers/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java
@@ -120,7 +120,8 @@
                     .limit(1)
                     .findFirst().get();
 
-            if (output != null && !output.port().equals(PortNumber.CONTROLLER)) {
+            if (output == null || !output.port().equals(PortNumber.CONTROLLER)) {
+                log.error("OLT can only filter packet to controller");
                 fail(filter, ObjectiveError.UNSUPPORTED);
                 return;
             }
@@ -142,15 +143,19 @@
             return;
         }
 
-        if (ethType.ethType().equals(EthType.EtherType.EAPOL)) {
+        if (ethType.ethType().equals(EthType.EtherType.EAPOL.ethType())) {
             provisionEapol(filter, ethType, output);
-        } else if (ethType.ethType().equals(EthType.EtherType.IPV4)) {
+        } else if (ethType.ethType().equals(EthType.EtherType.IPV4.ethType())) {
             IPProtocolCriterion ipProto = (IPProtocolCriterion)
                     filterForCriterion(filter.conditions(), Criterion.Type.IP_PROTO);
             if (ipProto.protocol() == IPv4.PROTOCOL_IGMP) {
                 provisionIGMP(filter, ethType, ipProto, output);
+            } else {
+                log.error("OLT can only filter igmp");
+                fail(filter, ObjectiveError.UNSUPPORTED);
             }
         } else {
+            log.error("OLT can only filter eapol and igmp");
             fail(filter, ObjectiveError.UNSUPPORTED);
         }
 
@@ -389,6 +394,7 @@
                 .makePermanent()
                 .withSelector(selector)
                 .withTreatment(treatment)
+                .withPriority(filter.priority())
                 .build();
 
         FlowRuleOperations.Builder opsBuilder = FlowRuleOperations.builder();
@@ -446,7 +452,7 @@
 
     private Criterion filterForCriterion(Collection<Criterion> criteria, Criterion.Type type) {
         return criteria.stream()
-                .filter(c -> c.type().equals(Criterion.Type.ETH_TYPE))
+                .filter(c -> c.type().equals(type))
                 .limit(1)
                 .findFirst().orElse(null);
     }