Fixed Findbugs issues in forwarding and arp modules

Change-Id: I25582ed3ea49848d77f88229303a964c510e578b
diff --git a/src/main/java/net/onrc/onos/apps/forwarding/Forwarding.java b/src/main/java/net/onrc/onos/apps/forwarding/Forwarding.java
index 4624617..15aed60 100644
--- a/src/main/java/net/onrc/onos/apps/forwarding/Forwarding.java
+++ b/src/main/java/net/onrc/onos/apps/forwarding/Forwarding.java
@@ -93,7 +93,7 @@
 
     private final Object lock = new Object();
 
-    private class PacketToPush {
+    private static class PacketToPush {
         public final OFPacketOut packet;
         public final long dpid;
 
@@ -103,7 +103,7 @@
         }
     }
 
-    private class PushedFlow {
+    private static class PushedFlow {
         public final String intentId;
         public boolean installed = false;
         public short firstOutPort;
@@ -113,7 +113,7 @@
         }
     }
 
-    private final class Path {
+    private static final class Path {
         public final MACAddress srcMac;
         public final MACAddress dstMac;
 
@@ -228,7 +228,7 @@
     public Command receive(
             IOFSwitch sw, OFMessage msg, FloodlightContext cntx) {
 
-        if (msg.getType() != OFType.PACKET_IN) {
+        if (msg.getType() != OFType.PACKET_IN || !(msg instanceof OFPacketIn)) {
             return Command.CONTINUE;
         }
 
diff --git a/src/main/java/net/onrc/onos/apps/proxyarp/PacketOutNotification.java b/src/main/java/net/onrc/onos/apps/proxyarp/PacketOutNotification.java
index c0b56a7..a3cbb28 100644
--- a/src/main/java/net/onrc/onos/apps/proxyarp/PacketOutNotification.java
+++ b/src/main/java/net/onrc/onos/apps/proxyarp/PacketOutNotification.java
@@ -1,6 +1,7 @@
 package net.onrc.onos.apps.proxyarp;
 
 import java.io.Serializable;
+import java.util.Arrays;
 
 /**
  * A PacketOutNotification contains data sent between ONOS instances that
@@ -24,6 +25,6 @@
     }
 
     public PacketOutNotification(byte[] packet) {
-        this.packet = packet;
+        this.packet = Arrays.copyOf(packet, packet.length);
     }
 }
diff --git a/src/main/java/net/onrc/onos/apps/proxyarp/ProxyArpManager.java b/src/main/java/net/onrc/onos/apps/proxyarp/ProxyArpManager.java
index 4691149..017b260 100644
--- a/src/main/java/net/onrc/onos/apps/proxyarp/ProxyArpManager.java
+++ b/src/main/java/net/onrc/onos/apps/proxyarp/ProxyArpManager.java
@@ -434,6 +434,9 @@
 
     @Override
     public Command receive(IOFSwitch sw, OFMessage msg, FloodlightContext cntx) {
+        if (!(msg instanceof OFPacketIn)) {
+            return Command.CONTINUE;
+        }
 
         OFPacketIn pi = (OFPacketIn) msg;
 
@@ -642,10 +645,17 @@
 
         byte[] senderIPAddress = zeroIpv4;
         Interface intf = configService.getOutgoingInterface(ipAddress);
-        if (intf != null) {
-            senderIPAddress = intf.getIpAddress().getAddress();
+        if (intf == null) {
+            // TODO handle the case where the controller needs to send an ARP
+            // request but there's not IP configuration. In this case the
+            // request should be broadcast out all edge ports in the network.
+            log.warn("Sending ARP requests with default configuration "
+                    + "not supported");
+            return;
         }
 
+        senderIPAddress = intf.getIpAddress().getAddress();
+
         arpRequest.setSenderProtocolAddress(senderIPAddress);
 
         Ethernet eth = new Ethernet();