From 48b6d3dcca30472cb6e8fc8a55a259c2f3157a7d Mon Sep 17 00:00:00 2001
From: Shudong Zhou <shudongzhou@gmail.com>
Date: Tue, 3 Jan 2012 17:54:01 -0800
Subject: [PATCH] Add log message when network addresses change, move Ethernet
 string conversion to the right place

---
 .../core/OFMessageFilterManager.java          | 113 +-----------------
 .../internal/DeviceManagerImpl.java           |  11 ++
 .../floodlightcontroller/packet/Ethernet.java | 105 ++++++++++++++++
 3 files changed, 118 insertions(+), 111 deletions(-)

diff --git a/src/main/java/net/floodlightcontroller/core/OFMessageFilterManager.java b/src/main/java/net/floodlightcontroller/core/OFMessageFilterManager.java
index d9ab24d7a..b7622bafb 100644
--- a/src/main/java/net/floodlightcontroller/core/OFMessageFilterManager.java
+++ b/src/main/java/net/floodlightcontroller/core/OFMessageFilterManager.java
@@ -49,18 +49,7 @@ import org.apache.thrift.transport.TTransportException;
 import org.apache.thrift.protocol.TBinaryProtocol;
 import org.apache.thrift.protocol.TProtocol;
 
-import net.floodlightcontroller.packet.ARP;
-import net.floodlightcontroller.packet.BPDU;
-import net.floodlightcontroller.packet.DHCP;
-import net.floodlightcontroller.packet.Data;
 import net.floodlightcontroller.packet.Ethernet;
-import net.floodlightcontroller.packet.ICMP;
-import net.floodlightcontroller.packet.IPacket;
-import net.floodlightcontroller.packet.IPv4;
-import net.floodlightcontroller.packet.LLC;
-import net.floodlightcontroller.packet.LLDP;
-import net.floodlightcontroller.packet.TCP;
-import net.floodlightcontroller.packet.UDP;
 import net.floodlightcontroller.packetstreamer.thrift.*;
 
 public class OFMessageFilterManager implements IOFMessageListener {
@@ -507,7 +496,7 @@ public class OFMessageFilterManager implements IOFMessageListener {
                 eth = IFloodlightProvider.bcStore.get(cntx,
                         IFloodlightProvider.CONTEXT_PI_PAYLOAD);
 
-                sb.append(getStringFromEthernetPacket(eth));
+                sb.append(eth.toString());
 
                 break;
 
@@ -537,7 +526,7 @@ public class OFMessageFilterManager implements IOFMessageListener {
 
                 eth = IFloodlightProvider.bcStore.get(cntx,
                         IFloodlightProvider.CONTEXT_PI_PAYLOAD);
-                sb.append(getStringFromEthernetPacket(eth));
+                sb.append(eth.toString());
 
                 sb.append("ADD: cookie: ");
                 sb.append(fm.getCookie());
@@ -568,102 +557,4 @@ public class OFMessageFilterManager implements IOFMessageListener {
         return this.getDataAsString(sw, msg, cntx).getBytes();
     }
 
-    public String getStringFromEthernetPacket(Ethernet eth) {
-
-        StringBuffer sb = new StringBuffer("\n");
-
-        IPacket pkt = (IPacket) eth.getPayload();
-
-        if (pkt instanceof ARP)
-            sb.append("arp");
-        else if (pkt instanceof LLDP)
-            sb.append("lldp");
-        else if (pkt instanceof ICMP)
-            sb.append("icmp");
-        else if (pkt instanceof IPv4)
-            sb.append("ip");
-        else if (pkt instanceof DHCP)
-            sb.append("dhcp");
-        else  sb.append(eth.getEtherType());
-
-        sb.append("\ndl_vlan: ");
-        if (eth.getVlanID() == Ethernet.VLAN_UNTAGGED)
-            sb.append("untagged");
-        else
-            sb.append(eth.getVlanID());
-        sb.append("\ndl_vlan_pcp: ");
-        sb.append(eth.getPriorityCode());
-        sb.append("\ndl_src: ");
-        sb.append(HexString.toHexString(eth.getSourceMACAddress()));
-        sb.append("\ndl_dst: ");
-        sb.append(HexString.toHexString(eth.getDestinationMACAddress()));
-
-
-        if (pkt instanceof ARP) {
-            ARP p = (ARP) pkt;
-            sb.append("\nnw_src: ");
-            sb.append(IPv4.fromIPv4Address(IPv4.toIPv4Address(p.getSenderProtocolAddress())));
-            sb.append("\nnw_dst: ");
-            sb.append(IPv4.fromIPv4Address(IPv4.toIPv4Address(p.getTargetProtocolAddress())));
-        }
-        else if (pkt instanceof LLDP) {
-            sb.append("lldp packet");
-        }
-        else if (pkt instanceof ICMP) {
-            ICMP icmp = (ICMP) pkt;
-            sb.append("\nicmp_type: ");
-            sb.append(icmp.getIcmpType());
-            sb.append("\nicmp_code: ");
-            sb.append(icmp.getIcmpCode());
-        }
-        else if (pkt instanceof IPv4) {
-            IPv4 p = (IPv4) pkt;
-            sb.append("\nnw_src: ");
-            sb.append(IPv4.fromIPv4Address(p.getSourceAddress()));
-            sb.append("\nnw_dst: ");
-            sb.append(IPv4.fromIPv4Address(p.getDestinationAddress()));
-            sb.append("\nnw_tos: ");
-            sb.append(p.getDiffServ());
-            sb.append("\nnw_proto: ");
-            sb.append(p.getProtocol());
-
-            if (pkt instanceof TCP) {
-                sb.append("\ntp_src: ");
-                sb.append(((TCP) pkt).getSourcePort());
-                sb.append("\ntp_dst: ");
-                sb.append(((TCP) pkt).getDestinationPort());
-
-            } else if (pkt instanceof UDP) {
-                sb.append("\ntp_src: ");
-                sb.append(((UDP) pkt).getSourcePort());
-                sb.append("\ntp_dst: ");
-                sb.append(((UDP) pkt).getDestinationPort());
-            }
-
-            if (pkt instanceof ICMP) {
-                ICMP icmp = (ICMP) pkt;
-                sb.append("\nicmp_type: ");
-                sb.append(icmp.getIcmpType());
-                sb.append("\nicmp_code: ");
-                sb.append(icmp.getIcmpCode());
-            }
-
-        }
-        else if (pkt instanceof DHCP) {
-            sb.append("\ndhcp packet");
-        }
-        else if (pkt instanceof Data) {
-            sb.append("\ndata packet");
-        }
-        else if (pkt instanceof LLC) {
-            sb.append("\nllc packet");
-        }
-        else if (pkt instanceof BPDU) {
-            sb.append("\nbpdu packet");
-        }
-        else sb.append("\nunknwon packet");
-
-        return sb.toString();
-    }
-
 }
diff --git a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
index dbed04cbb..1478c1183 100755
--- a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
+++ b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
@@ -825,6 +825,11 @@ public class DeviceManagerImpl implements IDeviceManager, IOFMessageListener,
                     dCopy.setNetworkAddresses(namap.values());
                     this.devMgrMaps.updateMaps(dCopy);
                     if (naOld !=null) removeNetworkAddressFromStorage(dCopy, naOld);
+                    log.info("Network address {} moved from {} to {} due to packet {}",
+                    		new Object[] {networkAddress,
+                    		              deviceByNwaddr.getDataLayerAddress(),
+                    		              device.getDataLayerAddress(),
+                    		              eth});
                 }
 
             }
@@ -1426,6 +1431,12 @@ public class DeviceManagerImpl implements IDeviceManager, IOFMessageListener,
                                             networkAddress.getNetworkAddress());
         String networkAddressId = deviceId + "-" + networkAddressString;
 
+        if (networkAddress.getNetworkAddress() == 0) {
+        	log.error("Zero network address for device {}\n {}",
+        			   device, Thread.currentThread().getStackTrace());
+        	return;
+        }
+        
         Map<String, Object> rowValues = new HashMap<String, Object>();
         rowValues.put(ID_COLUMN_NAME, networkAddressId);
         rowValues.put(DEVICE_COLUMN_NAME, deviceId);
diff --git a/src/main/java/net/floodlightcontroller/packet/Ethernet.java b/src/main/java/net/floodlightcontroller/packet/Ethernet.java
index 9a471a371..1e935a63f 100644
--- a/src/main/java/net/floodlightcontroller/packet/Ethernet.java
+++ b/src/main/java/net/floodlightcontroller/packet/Ethernet.java
@@ -22,6 +22,8 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.openflow.util.HexString;
+
 /**
  *
  * @author David Erickson (daviderickson@cs.stanford.edu)
@@ -362,4 +364,107 @@ public class Ethernet extends BasePacket {
             return false;
         return true;
     }
+    
+    /* (non-Javadoc)
+     * @see java.lang.Object#toString(java.lang.Object)
+     */
+    @Override
+    public String toString() {
+
+        StringBuffer sb = new StringBuffer("\n");
+
+        IPacket pkt = (IPacket) this.getPayload();
+
+        if (pkt instanceof ARP)
+            sb.append("arp");
+        else if (pkt instanceof LLDP)
+            sb.append("lldp");
+        else if (pkt instanceof ICMP)
+            sb.append("icmp");
+        else if (pkt instanceof IPv4)
+            sb.append("ip");
+        else if (pkt instanceof DHCP)
+            sb.append("dhcp");
+        else  sb.append(this.getEtherType());
+
+        sb.append("\ndl_vlan: ");
+        if (this.getVlanID() == Ethernet.VLAN_UNTAGGED)
+            sb.append("untagged");
+        else
+            sb.append(this.getVlanID());
+        sb.append("\ndl_vlan_pcp: ");
+        sb.append(this.getPriorityCode());
+        sb.append("\ndl_src: ");
+        sb.append(HexString.toHexString(this.getSourceMACAddress()));
+        sb.append("\ndl_dst: ");
+        sb.append(HexString.toHexString(this.getDestinationMACAddress()));
+
+
+        if (pkt instanceof ARP) {
+            ARP p = (ARP) pkt;
+            sb.append("\nnw_src: ");
+            sb.append(IPv4.fromIPv4Address(IPv4.toIPv4Address(p.getSenderProtocolAddress())));
+            sb.append("\nnw_dst: ");
+            sb.append(IPv4.fromIPv4Address(IPv4.toIPv4Address(p.getTargetProtocolAddress())));
+        }
+        else if (pkt instanceof LLDP) {
+            sb.append("lldp packet");
+        }
+        else if (pkt instanceof ICMP) {
+            ICMP icmp = (ICMP) pkt;
+            sb.append("\nicmp_type: ");
+            sb.append(icmp.getIcmpType());
+            sb.append("\nicmp_code: ");
+            sb.append(icmp.getIcmpCode());
+        }
+        else if (pkt instanceof IPv4) {
+            IPv4 p = (IPv4) pkt;
+            sb.append("\nnw_src: ");
+            sb.append(IPv4.fromIPv4Address(p.getSourceAddress()));
+            sb.append("\nnw_dst: ");
+            sb.append(IPv4.fromIPv4Address(p.getDestinationAddress()));
+            sb.append("\nnw_tos: ");
+            sb.append(p.getDiffServ());
+            sb.append("\nnw_proto: ");
+            sb.append(p.getProtocol());
+
+            if (pkt instanceof TCP) {
+                sb.append("\ntp_src: ");
+                sb.append(((TCP) pkt).getSourcePort());
+                sb.append("\ntp_dst: ");
+                sb.append(((TCP) pkt).getDestinationPort());
+
+            } else if (pkt instanceof UDP) {
+                sb.append("\ntp_src: ");
+                sb.append(((UDP) pkt).getSourcePort());
+                sb.append("\ntp_dst: ");
+                sb.append(((UDP) pkt).getDestinationPort());
+            }
+
+            if (pkt instanceof ICMP) {
+                ICMP icmp = (ICMP) pkt;
+                sb.append("\nicmp_type: ");
+                sb.append(icmp.getIcmpType());
+                sb.append("\nicmp_code: ");
+                sb.append(icmp.getIcmpCode());
+            }
+
+        }
+        else if (pkt instanceof DHCP) {
+            sb.append("\ndhcp packet");
+        }
+        else if (pkt instanceof Data) {
+            sb.append("\ndata packet");
+        }
+        else if (pkt instanceof LLC) {
+            sb.append("\nllc packet");
+        }
+        else if (pkt instanceof BPDU) {
+            sb.append("\nbpdu packet");
+        }
+        else sb.append("\nunknwon packet");
+
+        return sb.toString();
+    }
+
 }
-- 
GitLab