Adding ACL flow for Table 60 for Ipv6
Change-Id: Iab5a510ab77e2f50a9d8f28fe22edf053efc1884
diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/XpliantPipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/XpliantPipeline.java
index b5b202d..2dca42d 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/XpliantPipeline.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/XpliantPipeline.java
@@ -57,4 +57,9 @@
public boolean requireMplsTtlModification() {
return false;
}
+
+ @Override
+ protected boolean requireEthType() {
+ return false;
+ }
}
diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/CpqdOfdpa2Pipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/CpqdOfdpa2Pipeline.java
index de19330..2e14efa 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/CpqdOfdpa2Pipeline.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/CpqdOfdpa2Pipeline.java
@@ -138,6 +138,11 @@
return false;
}
+ @Override
+ protected boolean requireEthType() {
+ return false;
+ }
+
/**
* Determines whether this pipeline support copy ttl instructions or not.
*
diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa2Pipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa2Pipeline.java
index ad025b4..f282a00 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa2Pipeline.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa2Pipeline.java
@@ -96,6 +96,7 @@
import java.util.Timer;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
import static java.util.concurrent.Executors.newScheduledThreadPool;
import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
@@ -203,6 +204,16 @@
}
/**
+ * Determines whether this pipeline requires one additional flow matching on ethType 0x86dd in ACL table.
+ *
+ * @return true to create one additional flow matching on ethType 0x86dd in ACL table
+ */
+ protected boolean requireEthType() {
+ return true;
+ }
+
+
+ /**
* Determines whether this pipeline requires MPLS BOS match.
*
* @return true to use MPLS BOS match
@@ -1063,6 +1074,8 @@
protected Collection<FlowRule> processVersatile(ForwardingObjective fwd) {
log.debug("Processing versatile forwarding objective:{} in dev:{}",
fwd.id(), deviceId);
+ List<FlowRule> flowRules = new ArrayList<>();
+ final AtomicBoolean ethTypeUsed = new AtomicBoolean(false);
if (fwd.nextId() == null && fwd.treatment() == null) {
log.error("Forwarding objective {} from {} must contain "
@@ -1110,7 +1123,10 @@
} else {
sbuilder.add(criterion);
}
- } else {
+ } else if (criterion instanceof EthTypeCriterion) {
+ sbuilder.add(criterion);
+ ethTypeUsed.set(true);
+ } else {
sbuilder.add(criterion);
}
});
@@ -1165,7 +1181,24 @@
.withTreatment(ttBuilder.build())
.makePermanent()
.forTable(ACL_TABLE);
- return Collections.singletonList(ruleBuilder.build());
+
+ flowRules.add(ruleBuilder.build());
+
+ if (!ethTypeUsed.get() && requireEthType()) {
+ log.debug("{} doesn't match on ethType but requireEthType is true, adding complementary ACL flow.",
+ sbuilder.toString());
+ sbuilder.matchEthType(Ethernet.TYPE_IPV6);
+ FlowRule.Builder ethTypeRuleBuilder = DefaultFlowRule.builder()
+ .fromApp(fwd.appId())
+ .withPriority(fwd.priority())
+ .forDevice(deviceId)
+ .withSelector(sbuilder.build())
+ .withTreatment(ttBuilder.build())
+ .makePermanent()
+ .forTable(ACL_TABLE);
+ flowRules.add(ethTypeRuleBuilder.build());
+ }
+ return flowRules;
}
/**
diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OvsOfdpa2Pipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OvsOfdpa2Pipeline.java
index 3aa8865..97c6143 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OvsOfdpa2Pipeline.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OvsOfdpa2Pipeline.java
@@ -55,4 +55,9 @@
protected boolean supportsUnicastBlackHole() {
return true;
}
+
+ @Override
+ protected boolean requireEthType() {
+ return false;
+ }
}