Double tagged filtering objective with inner vlan criteria
- when double tagged filtering objective an inner vlan criteria is submitted
- update to ofdpa and ovsofdpa drivers to evaluate the inner vlan criteria correctly
Change-Id: I33170c9b83482a5f26f13f7098a9b24a92da9544
diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa3Pipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa3Pipeline.java
index 2ab8a18..4632a4f 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa3Pipeline.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/Ofdpa3Pipeline.java
@@ -314,12 +314,10 @@
ethCriterion = (EthCriterion) criterion;
break;
case VLAN_VID:
- if (innervidCriterion == null) {
- innervidCriterion = (VlanIdCriterion) criterion;
- } else {
- outerVidCriterion = innervidCriterion;
- innervidCriterion = (VlanIdCriterion) criterion;
- }
+ outerVidCriterion = (VlanIdCriterion) criterion;
+ break;
+ case INNER_VLAN_VID:
+ innervidCriterion = (VlanIdCriterion) criterion;
break;
default:
log.warn("Unsupported filter {}", criterion);
diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OfdpaPipelineUtility.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OfdpaPipelineUtility.java
index 683b9f6..242ab47 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OfdpaPipelineUtility.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OfdpaPipelineUtility.java
@@ -42,9 +42,7 @@
import org.onosproject.net.flowobjective.ObjectiveError;
import static org.onosproject.net.behaviour.Pipeliner.ACCUMULATOR_ENABLED;
-import static org.onosproject.net.flow.criteria.Criterion.Type.ETH_TYPE;
-import static org.onosproject.net.flow.criteria.Criterion.Type.MPLS_BOS;
-import static org.onosproject.net.flow.criteria.Criterion.Type.VLAN_VID;
+import static org.onosproject.net.flow.criteria.Criterion.Type.*;
import static org.onosproject.net.flow.instructions.Instruction.Type.L2MODIFICATION;
import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanIdInstruction;
import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModEtherInstruction;
@@ -357,7 +355,8 @@
return fob.meta() != null &&
fob.meta().allInstructions().stream().anyMatch(inst -> inst.type() == L2MODIFICATION
&& ((L2ModificationInstruction) inst).subtype() == L2SubType.VLAN_POP) &&
- fob.conditions().stream().filter(criterion -> criterion.type() == VLAN_VID).count() == 2;
+ fob.conditions().stream().anyMatch(criterion -> criterion.type() == VLAN_VID) &&
+ fob.conditions().stream().anyMatch(criterion -> criterion.type() == INNER_VLAN_VID);
}
}
diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OvsOfdpaPipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OvsOfdpaPipeline.java
index cc6e100..a9c15d8 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OvsOfdpaPipeline.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OvsOfdpaPipeline.java
@@ -251,12 +251,10 @@
ethCriterion = (EthCriterion) criterion;
break;
case VLAN_VID:
- if (innervidCriterion == null) {
- innervidCriterion = (VlanIdCriterion) criterion;
- } else {
- outerVidCriterion = innervidCriterion;
- innervidCriterion = (VlanIdCriterion) criterion;
- }
+ outerVidCriterion = (VlanIdCriterion) criterion;
+ break;
+ case INNER_VLAN_VID:
+ innervidCriterion = (VlanIdCriterion) criterion;
break;
default:
log.warn("Unsupported filter {}", criterion);