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