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