OpenFlow message processing for new loxi

Depends-On: Id69c8597eb4564653c56cdc90f2dcec50afbdd25

Change-Id: Ib14fbadd3debf98ce1d56343179f8e7929f8ade8
diff --git a/providers/openflow/base/features.xml b/providers/openflow/base/features.xml
index f2af0c6..dc00bde 100644
--- a/providers/openflow/base/features.xml
+++ b/providers/openflow/base/features.xml
@@ -18,7 +18,7 @@
     <feature name="${project.artifactId}" version="${project.version}"
              description="${project.description}">
         <feature>onos-api</feature>
-        <bundle>mvn:org.onosproject/openflowj/0.9.7.onos</bundle>
+        <bundle>mvn:org.onosproject/openflowj/3.2.0.onos</bundle>
         <bundle>mvn:${project.groupId}/onos-of-api/${project.version}</bundle>
         <bundle>mvn:${project.groupId}/onos-of-ctl/${project.version}</bundle>
 
diff --git a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
index f9858a4..5e0fae4 100644
--- a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
+++ b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
@@ -110,6 +110,7 @@
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.Dictionary;
+import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -364,12 +365,14 @@
         OFPortMod.Builder pmb = sw.factory().buildPortMod();
         OFPort port = OFPort.of((int) portNumber.toLong());
         pmb.setPortNo(port);
-        if (enable) {
-            pmb.setConfig(0x0); // port_down bit 0
-        } else {
-            pmb.setConfig(0x1); // port_down bit 1
+        Set<OFPortConfig> portConfig = EnumSet.noneOf(OFPortConfig.class);
+        if (!enable) {
+            portConfig.add(OFPortConfig.PORT_DOWN);
         }
-        pmb.setMask(0x1);
+        pmb.setConfig(portConfig);
+        Set<OFPortConfig> portMask = EnumSet.noneOf(OFPortConfig.class);
+        portMask.add(OFPortConfig.PORT_DOWN);
+        pmb.setMask(portMask);
         pmb.setAdvertise(0x0);
         for (OFPortDesc pd : sw.getPorts()) {
             if (pd.getPortNo().equals(port)) {
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 5c245a8..9fa03be 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
@@ -208,7 +208,7 @@
                             .withPriority(removed.getPriority())
                             .withIdleTimeout(removed.getIdleTimeout())
                             .withCookie(removed.getCookie().getValue())
-                            .withReason(FlowRule.FlowRemoveReason.parseShort(removed.getReason()));
+                            .withReason(FlowRule.FlowRemoveReason.parseShort((short) removed.getReason().ordinal()));
 
                     if (removed.getVersion() != OFVersion.OF_10) {
                         builder.forTable(removed.getTableId().getValue());
diff --git a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterModBuilder.java b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterModBuilder.java
index 406337b..a26e05a 100644
--- a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterModBuilder.java
+++ b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterModBuilder.java
@@ -28,8 +28,10 @@
 import org.slf4j.Logger;
 
 import java.util.Collection;
+import java.util.EnumSet;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 import static com.google.common.base.Preconditions.checkArgument;
@@ -82,37 +84,36 @@
     public OFMeterMod add() {
         validate();
         OFMeterMod.Builder builder = builderMeterMod();
-        builder.setCommand(OFMeterModCommand.ADD.ordinal());
+        builder.setCommand(OFMeterModCommand.ADD);
         return builder.build();
     }
 
     public OFMeterMod remove() {
         validate();
         OFMeterMod.Builder builder = builderMeterMod();
-        builder.setCommand(OFMeterModCommand.DELETE.ordinal());
+        builder.setCommand(OFMeterModCommand.DELETE);
         return builder.build();
     }
 
     public OFMeterMod modify() {
         validate();
         OFMeterMod.Builder builder = builderMeterMod();
-        builder.setCommand(OFMeterModCommand.MODIFY.ordinal());
+        builder.setCommand(OFMeterModCommand.MODIFY);
         return builder.build();
     }
 
     private OFMeterMod.Builder builderMeterMod() {
         OFMeterMod.Builder builder = factory.buildMeterMod();
-        int flags = 0;
+        Set<OFMeterFlags> flags = EnumSet.noneOf(OFMeterFlags.class);
         if (burst) {
-            // covering loxi short comings.
-            flags |= 1 << OFMeterFlags.BURST.ordinal();
+            flags.add(OFMeterFlags.BURST);
         }
         switch (unit) {
             case PKTS_PER_SEC:
-                flags |= 1 << OFMeterFlags.PKTPS.ordinal();
+                flags.add(OFMeterFlags.PKTPS);
                 break;
             case KB_PER_SEC:
-                flags |= 1 << OFMeterFlags.KBPS.ordinal();
+                flags.add(OFMeterFlags.KBPS);
                 break;
             default:
                 log.warn("Unknown unit type {}", unit);