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

Change-Id: I84d2785f37ea51b08244de9c54effe5224af9531
diff --git a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/util/MeterFeaturesBuilder.java b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/util/MeterFeaturesBuilder.java
index abfa4aa..35f9dde 100644
--- a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/util/MeterFeaturesBuilder.java
+++ b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/util/MeterFeaturesBuilder.java
@@ -21,7 +21,9 @@
 import org.onosproject.net.meter.DefaultMeterFeatures;
 import org.onosproject.net.meter.Meter;
 import org.onosproject.net.meter.MeterFeatures;
+import org.onosproject.net.meter.MeterFeaturesFlag;
 import org.projectfloodlight.openflow.protocol.OFMeterFeatures;
+import org.projectfloodlight.openflow.protocol.OFVersion;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -32,9 +34,15 @@
 import static org.onosproject.net.meter.Band.Type.REMARK;
 import static org.onosproject.net.meter.Meter.Unit.KB_PER_SEC;
 import static org.onosproject.net.meter.Meter.Unit.PKTS_PER_SEC;
+import static org.onosproject.net.meter.MeterFeaturesFlag.ACTION_SET;
+import static org.onosproject.net.meter.MeterFeaturesFlag.ANY_POSITION;
+import static org.onosproject.net.meter.MeterFeaturesFlag.MULTI_LIST;
 import static org.projectfloodlight.openflow.protocol.ver13.OFMeterBandTypeSerializerVer13.DROP_VAL;
 import static org.projectfloodlight.openflow.protocol.ver13.OFMeterBandTypeSerializerVer13.DSCP_REMARK_VAL;
 import static org.projectfloodlight.openflow.protocol.ver13.OFMeterFlagsSerializerVer13.*;
+import static org.projectfloodlight.openflow.protocol.ver15.OFMeterFeatureFlagsSerializerVer15.ACTION_SET_VAL;
+import static org.projectfloodlight.openflow.protocol.ver15.OFMeterFeatureFlagsSerializerVer15.ANY_POSITION_VAL;
+import static org.projectfloodlight.openflow.protocol.ver15.OFMeterFeatureFlagsSerializerVer15.MULTI_LIST_VAL;
 
 /**
  * OpenFlow builder of MeterFeatures.
@@ -98,6 +106,24 @@
          * Stats are supported ?
          */
         builder.hasStats((STATS_VAL & ofMeterFeatures.getCapabilities()) != 0);
+
+        /*
+         * Along with the OF1.5, we extract meter features flags
+         */
+        if (ofMeterFeatures.getVersion().wireVersion >= OFVersion.OF_15.wireVersion) {
+            Set<MeterFeaturesFlag> meterFeaturesFlags = Sets.newHashSet();
+            if ((ACTION_SET_VAL & ofMeterFeatures.getFeatures()) != 0) {
+                meterFeaturesFlags.add(ACTION_SET);
+            }
+            if ((ANY_POSITION_VAL & ofMeterFeatures.getFeatures()) != 0) {
+                meterFeaturesFlags.add(ANY_POSITION);
+            }
+            if ((MULTI_LIST_VAL & ofMeterFeatures.getFeatures()) != 0) {
+                meterFeaturesFlags.add(MULTI_LIST);
+            }
+            builder.withFeatures(meterFeaturesFlags);
+        }
+
         return builder.build();
     }