iff --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 f6d16f4..018c64a 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 @@ -379,6 +379,8 @@ public class OltPipeline extends AbstractHandlerBehaviour implements Pipeliner { } private void installDownstreamRules(ForwardingObjective fwd) { + log.info("install downstream rules"); + log.info("objective: {}", fwd); List> vlanOps = vlanOps(fwd, L2ModificationInstruction.L2SubType.VLAN_POP); @@ -400,16 +402,26 @@ public class OltPipeline extends AbstractHandlerBehaviour implements Pipeliner { 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; + long mdvalue = (cvid << 32) | outPort; + + Criterion bullshit = Criteria.matchMetadata(mdvalue); if (outerVlan == null || innerVlan == null || inport == null) { log.error("Forwarding objective is underspecified: {}", fwd); fail(fwd, ObjectiveError.BADPARAMS); return; } - Criterion innerVid = Criteria.matchVlanId(((VlanIdCriterion) innerVlan).vlanId()); + log.info("OLT Pipeline: inport: {}", inport); + log.info("OLT Pipeline: outerVlan: {}", outerVlan); + log.info("OLT Pipeline: innerTag: {}", cvid); + log.info("OLT Pipeline: outPort: {}", outPort); + log.info("OLT Pipeline: bullshit: {}", bullshit); + FlowRule.Builder outer = DefaultFlowRule.builder() .fromApp(fwd.appId()) .forDevice(deviceId)