ONOS-7807: Fix to provide inner-tag of Q-in-Q flows correctly to VOLTHA
Change-Id: Ied996f53a388731afc7978ea901a09d8e47e7c1c
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 6cc63c2..b483cf1 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
@@ -428,7 +428,11 @@
Criterion outerVlan = selector.getCriterion(Criterion.Type.VLAN_VID);
Criterion innerVlan = selector.getCriterion(Criterion.Type.INNER_VLAN_VID);
Criterion inport = selector.getCriterion(Criterion.Type.IN_PORT);
- Criterion bullshit = Criteria.matchMetadata(output.port().toLong());
+
+ long cvid = ((VlanIdCriterion) innerVlan).vlanId().toShort();
+ long outPort = output.port().toLong() & 0x0FFFFFFFFL;
+
+ Criterion metadata = Criteria.matchMetadata((cvid << 32) | outPort);
if (outerVlan == null || innerVlan == null || inport == null) {
log.error("Forwarding objective is underspecified: {}", fwd);
@@ -443,7 +447,7 @@
.forDevice(deviceId)
.makePermanent()
.withPriority(fwd.priority())
- .withSelector(buildSelector(inport, outerVlan, bullshit))
+ .withSelector(buildSelector(inport, outerVlan, metadata))
.withTreatment(buildTreatment(popAndRewrite.getLeft(),
Instructions.transition(QQ_TABLE)));