Support for matching on MPLS BOS indicator bit

Change-Id: I9f8c3f499beff7c70b4c829c2846c71007932d94
diff --git a/drivers/src/main/java/org/onosproject/driver/pipeline/OFDPA1Pipeline.java b/drivers/src/main/java/org/onosproject/driver/pipeline/OFDPA1Pipeline.java
index 54f8df5..f17309e 100644
--- a/drivers/src/main/java/org/onosproject/driver/pipeline/OFDPA1Pipeline.java
+++ b/drivers/src/main/java/org/onosproject/driver/pipeline/OFDPA1Pipeline.java
@@ -31,6 +31,7 @@
 
 import org.onlab.osgi.ServiceDirectory;
 import org.onlab.packet.Ethernet;
+import org.onlab.packet.MplsLabel;
 import org.onlab.packet.VlanId;
 import org.onlab.util.KryoNamespace;
 import org.onosproject.core.ApplicationId;
@@ -618,6 +619,36 @@
         //processBridgingTable();
         //processAclTable();
         //processGroupTable();
+        //processMplsTable();
+    }
+
+    protected void processMplsTable() {
+        FlowRuleOperations.Builder ops = FlowRuleOperations.builder();
+        TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
+        selector.matchEthType(Ethernet.MPLS_UNICAST);
+        selector.matchMplsLabel(MplsLabel.mplsLabel(0xff));
+        selector.matchMplsBos(true);
+        TrafficTreatment.Builder treatment = DefaultTrafficTreatment.builder();
+        treatment.popMpls(Ethernet.TYPE_IPV4);
+        treatment.transition(ACL_TABLE);
+        FlowRule test = DefaultFlowRule.builder().forDevice(deviceId)
+                .withSelector(selector.build()).withTreatment(treatment.build())
+                .withPriority(LOWEST_PRIORITY).fromApp(driverId).makePermanent()
+                .forTable(25).build();
+        ops = ops.add(test);
+
+        flowRuleService.apply(ops.build(new FlowRuleOperationsContext() {
+            @Override
+            public void onSuccess(FlowRuleOperations ops) {
+                log.info("Initialized mpls table");
+            }
+
+            @Override
+            public void onError(FlowRuleOperations ops) {
+                log.info("Failed to initialize mpls table");
+            }
+        }));
+
     }
 
     protected void processPortTable() {