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);
}