Add exception handling for unfound switch in processPacket

Change-Id: I9a9e539c02bf925ba3ab24b201d09a90e9163d96
diff --git a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java
index 3af1a89..d4872db 100644
--- a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java
+++ b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java
@@ -280,6 +280,8 @@
         Collection<OFGroupDescStatsEntry> groupDescStats;
         Collection<OFPortStatsEntry> portStats;
 
+        OpenFlowSwitch sw = this.getSwitch(dpid);
+
         switch (msg.getType()) {
         case PORT_STATUS:
             for (OpenFlowSwitchListener l : ofSwitchListener) {
@@ -292,9 +294,12 @@
             }
             break;
         case PACKET_IN:
+            if (sw == null) {
+                log.error("Switch {} is not found", dpid);
+                break;
+            }
             OpenFlowPacketContext pktCtx = DefaultOpenFlowPacketContext
-            .packetContextFromPacketIn(this.getSwitch(dpid),
-                    (OFPacketIn) msg);
+            .packetContextFromPacketIn(sw, (OFPacketIn) msg);
             for (PacketListener p : ofPacketListener.values()) {
                 p.handlePacket(pktCtx);
             }
@@ -367,7 +372,11 @@
                     if (reply instanceof OFCalientFlowStatsReply) {
                         // Convert Calient flow statistics to regular flow stats
                         // TODO: parse remaining fields such as power levels etc. when we have proper monitoring API
-                        OFFlowStatsReply.Builder fsr = getSwitch(dpid).factory().buildFlowStatsReply();
+                        if (sw == null) {
+                            log.error("Switch {} is not found", dpid);
+                            break;
+                        }
+                        OFFlowStatsReply.Builder fsr = sw.factory().buildFlowStatsReply();
                         List<OFFlowStatsEntry> entries = new LinkedList<>();
                         for (OFCalientFlowStatsEntry entry : ((OFCalientFlowStatsReply) msg).getEntries()) {
 
@@ -382,7 +391,7 @@
                                     .getFactory(msg.getVersion())
                                     .instructions()
                                     .applyActions(Collections.singletonList(action));
-                            OFFlowStatsEntry fs = getSwitch(dpid).factory().buildFlowStatsEntry()
+                            OFFlowStatsEntry fs = sw.factory().buildFlowStatsEntry()
                                     .setMatch(entry.getMatch())
                                     .setTableId(entry.getTableId())
                                     .setDurationSec(entry.getDurationSec())
@@ -425,12 +434,16 @@
             }
             break;
         case EXPERIMENTER:
+            if (sw == null) {
+                log.error("Switch {} is not found", dpid);
+                break;
+            }
             long experimenter = ((OFExperimenter) msg).getExperimenter();
             if (experimenter == 0x748771) {
                 // LINC-OE port stats
                 OFCircuitPortStatus circuitPortStatus = (OFCircuitPortStatus) msg;
-                OFPortStatus.Builder portStatus = this.getSwitch(dpid).factory().buildPortStatus();
-                OFPortDesc.Builder portDesc = this.getSwitch(dpid).factory().buildPortDesc();
+                OFPortStatus.Builder portStatus = sw.factory().buildPortStatus();
+                OFPortDesc.Builder portDesc = sw.factory().buildPortDesc();
                 portDesc.setPortNo(circuitPortStatus.getPortNo())
                         .setHwAddr(circuitPortStatus.getHwAddr())
                         .setName(circuitPortStatus.getName())