adding a criterion for inner vlans
used by olt to match on the inner vlan

Change-Id: I7671b68d9860d598395cba134a589ca23f264c7e
diff --git a/drivers/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java b/drivers/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java
index 37980f1..28d6071 100644
--- a/drivers/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java
+++ b/drivers/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java
@@ -214,24 +214,34 @@
 
         Pair<Instruction, Instruction> popAndRewrite = vlanOps.remove(0);
 
-        FlowRule.Builder inner = DefaultFlowRule.builder()
+        TrafficSelector selector = fwd.selector();
+
+        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);
+
+        if (outerVlan == null || innerVlan == null || inport == null) {
+            log.error("Forwarding objective is underspecified: {}", fwd);
+            fail(fwd, ObjectiveError.BADPARAMS);
+            return;
+        }
+
+        FlowRule.Builder outer = DefaultFlowRule.builder()
                 .forDevice(deviceId)
                 .fromApp(appId)
                 .makePermanent()
                 .withPriority(fwd.priority())
-                .withSelector(fwd.selector())
+                .withSelector(buildSelector(inport, outerVlan))
                 .withTreatment(buildTreatment(popAndRewrite.getLeft(),
                                               Instructions.transition(QQ_TABLE)));
-        PortCriterion inPort = (PortCriterion)
-                fwd.selector().getCriterion(Criterion.Type.IN_PORT);
 
-        FlowRule.Builder outer = DefaultFlowRule.builder()
+        FlowRule.Builder inner = DefaultFlowRule.builder()
                 .forDevice(deviceId)
                 .fromApp(appId)
                 .forTable(QQ_TABLE)
                 .makePermanent()
                 .withPriority(fwd.priority())
-                .withSelector(buildSelector(inPort))
+                .withSelector(buildSelector(inport, innerVlan))
                 .withTreatment(buildTreatment(popAndRewrite.getRight(),
                                               output));