ONOS-7807: Fix to provide inner-tag of Q-in-Q flows correctly to VOLTHA
Change-Id: I056c22a34b5a21e8969ecaa43d50d3f9c86b115d
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 6fcf5f4..19532cd 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
@@ -430,7 +430,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);
@@ -445,7 +449,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)));