Multiple meter support added and meter action added for OF1.5
MeterFeaturesFlag added for OF1.5

Change-Id: I84d2785f37ea51b08244de9c54effe5224af9531
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer15.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer15.java
index 7ba893a..7f5a099 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer15.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer15.java
@@ -172,9 +172,11 @@
         List<OFAction> actions = new LinkedList<>();
 
         //Meter action handling
-        if (null != treatment.metered() && immediateActions) {
-            OFAction meterAction = buildMultipleMeterAction(treatment.metered());
-            actions.add(meterAction);
+        if (null != treatment.meters() && immediateActions) {
+            treatment.meters().forEach(meterInstruction -> {
+                OFAction meterAction = buildMeterAction(meterInstruction);
+                actions.add(meterAction);
+            });
         }
 
         for (Instruction i : treatments) {
@@ -287,7 +289,7 @@
      * @param meterInstruction meter instruction
      * @return meter action
      */
-    protected OFAction buildMultipleMeterAction(Instructions.MeterInstruction meterInstruction) {
+    protected OFAction buildMeterAction(Instructions.MeterInstruction meterInstruction) {
         OFActionMeter.Builder meterBuilder = factory().actions().buildMeter()
                 .setMeterId(meterInstruction.meterId().id());
         return meterBuilder.build();
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/util/FlowEntryBuilder.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/util/FlowEntryBuilder.java
index c16c34f..dee9455 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/util/FlowEntryBuilder.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/util/FlowEntryBuilder.java
@@ -49,6 +49,7 @@
 import org.onosproject.net.flow.TrafficTreatment;
 import org.onosproject.net.flow.criteria.ExtensionSelectorType.ExtensionSelectorTypes;
 import org.onosproject.net.flow.instructions.Instructions;
+import org.onosproject.net.meter.MeterId;
 import org.onosproject.openflow.controller.ExtensionSelectorInterpreter;
 import org.onosproject.openflow.controller.ExtensionTreatmentInterpreter;
 import org.onosproject.provider.of.flow.impl.NewAdaptiveFlowStatsCollector;
@@ -66,6 +67,7 @@
 import org.projectfloodlight.openflow.protocol.action.OFActionEnqueue;
 import org.projectfloodlight.openflow.protocol.action.OFActionExperimenter;
 import org.projectfloodlight.openflow.protocol.action.OFActionGroup;
+import org.projectfloodlight.openflow.protocol.action.OFActionMeter;
 import org.projectfloodlight.openflow.protocol.action.OFActionOutput;
 import org.projectfloodlight.openflow.protocol.action.OFActionPopMpls;
 import org.projectfloodlight.openflow.protocol.action.OFActionPushVlan;
@@ -605,6 +607,10 @@
                     OFActionPushVlan pushVlan = (OFActionPushVlan) act;
                     builder.pushVlan(new EthType((short) pushVlan.getEthertype().getValue()));
                     break;
+                case METER:
+                    OFActionMeter actionMeter = (OFActionMeter) act;
+                    builder.meter(MeterId.meterId(actionMeter.getMeterId()));
+                    break;
                 case SET_TP_DST:
                 case SET_TP_SRC:
                 case POP_PBB: