ONOS-5703 OFChannelHandler does not handle error if meter is not supported

Change-Id: Iad5c88ba4ad408b645c57db271650dd6b79f54c9
diff --git a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java
index 930f5dd..5d9081a 100644
--- a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java
+++ b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java
@@ -33,6 +33,7 @@
 import org.jboss.netty.handler.timeout.IdleStateAwareChannelHandler;
 import org.jboss.netty.handler.timeout.IdleStateEvent;
 import org.jboss.netty.handler.timeout.ReadTimeoutException;
+import org.onosproject.openflow.controller.Dpid;
 import org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver;
 import org.onosproject.openflow.controller.driver.SwitchStateException;
 import org.projectfloodlight.openflow.exceptions.OFParseError;
@@ -578,7 +579,12 @@
             @Override
             void processOFError(OFChannelHandler h, OFErrorMsg m)
                     throws IOException {
-                // will never be called. We override processOFMessage
+                // Hardware switches may reply OFErrorMsg if meter is not supported
+                log.warn("Received OFError {}. It seems {} does not support Meter.",
+                        m.getErrType().name(), Dpid.uri(h.thisdpid));
+                log.debug("{}", m);
+                h.sendHandshakeDescriptionStatsRequest();
+                h.setState(WAIT_DESCRIPTION_STAT_REPLY);
             }
 
             @Override