Adding metadata match criterion to solve the conflict-flow issue.
(SEBA-668)

Change-Id: I1a4b6512445489ecfc605100ca4bcaf4828aebad
(cherry picked from commit 1c0c2787d63bc964bdbc273cff357aa1831884ed)
diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java
index 4ccb9e3..a54a140 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java
@@ -464,7 +464,13 @@
         VlanId innerVlan = ((VlanIdCriterion) innerVlanCriterion).vlanId();
         Criterion innerVid = Criteria.matchVlanId(innerVlan);
 
-        TrafficSelector outerSelector = buildSelector(inport, outerVlan);
+        // Required to differentiate the same match flows
+        // Please note that S tag and S p bit values will be same for the same service - so conflict flows!
+        // Metadata match criteria solves the conflict issue - but not used by the voltha
+        // Maybe - find a better way to solve the above problem
+        Criterion metadata = Criteria.matchMetadata(innerVlan.toShort());
+
+        TrafficSelector outerSelector = buildSelector(inport, metadata, outerVlan);
 
         if (innerVlan.toShort() == VlanId.ANY_VALUE) {
             installDownstreamRulesForAnyVlan(fwd, output, outerSelector, buildSelector(inport,