Retrieving handshaker drivers should respect driver annotation.

ONOS-2404.

Ported from onos-1.2 branch.

Change-Id: Ib0cd76790612216030a9dd50ed434253d8202868
diff --git a/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/Controller.java b/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/Controller.java
index 6cbd991..6c0fed5 100644
--- a/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/Controller.java
+++ b/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/Controller.java
@@ -21,6 +21,8 @@
 import org.jboss.netty.channel.group.ChannelGroup;
 import org.jboss.netty.channel.group.DefaultChannelGroup;
 import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
+import org.onlab.util.ItemNotFoundException;
+import org.onosproject.net.DeviceId;
 import org.onosproject.net.driver.DefaultDriverData;
 import org.onosproject.net.driver.DefaultDriverHandler;
 import org.onosproject.net.driver.Driver;
@@ -206,8 +208,14 @@
     protected OpenFlowSwitchDriver getOFSwitchInstance(long dpid,
                                                        OFDescStatsReply desc,
                                                        OFVersion ofv) {
-        Driver driver = driverService
-                .getDriver(desc.getMfrDesc(), desc.getHwDesc(), desc.getSwDesc());
+        Dpid dpidObj = new Dpid(dpid);
+
+        Driver driver;
+        try {
+             driver = driverService.getDriver(DeviceId.deviceId(Dpid.uri(dpidObj)));
+        } catch (ItemNotFoundException e) {
+            driver = driverService.getDriver(desc.getMfrDesc(), desc.getHwDesc(), desc.getSwDesc());
+        }
 
         if (driver != null && driver.hasBehaviour(OpenFlowSwitchDriver.class)) {
             Dpid did = new Dpid(dpid);