diff --git a/.gitignore b/.gitignore index aeb0dd73cfa475e0201e0be90a255c6240b0ba04..ad6e64ae7652599743f9625971681d5529b7b232 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ target thrift logback.xml +*.swp +*.pyc diff --git a/src/main/java/net/floodlightcontroller/packet/Ethernet.java b/src/main/java/net/floodlightcontroller/packet/Ethernet.java index 123c9e0d0eff5bb16e51f5d043b53f52b2130ce3..e547812efb87464ec4492d7f96f24de6218fead1 100644 --- a/src/main/java/net/floodlightcontroller/packet/Ethernet.java +++ b/src/main/java/net/floodlightcontroller/packet/Ethernet.java @@ -329,6 +329,8 @@ public class Ethernet extends BasePacket { int result = super.hashCode(); result = prime * result + destinationMACAddress.hashCode(); result = prime * result + etherType; + result = prime * result + vlanID; + result = prime * result + priorityCode; result = prime * result + (pad ? 1231 : 1237); result = prime * result + sourceMACAddress.hashCode(); return result; diff --git a/src/main/java/net/floodlightcontroller/routing/ForwardingBase.java b/src/main/java/net/floodlightcontroller/routing/ForwardingBase.java index fe5b938d74d2754e446b25f9c8e663f1d2d4bb5b..32525a8c8b5654fae27ee345295864aceada1a71 100644 --- a/src/main/java/net/floodlightcontroller/routing/ForwardingBase.java +++ b/src/main/java/net/floodlightcontroller/routing/ForwardingBase.java @@ -70,7 +70,8 @@ public abstract class ForwardingBase implements // for broadcast loop suppression protected boolean broadcastCacheFeature = true; - public final int prime = 2633; // for hash calculation + public final int prime1 = 2633; // for hash calculation + public final static int prime2 = 4357; // for hash calculation public TimedCache<Long> broadcastCache = new TimedCache<Long>(100, 5*1000); // 5 seconds interval; @@ -506,8 +507,8 @@ public abstract class ForwardingBase implements IFloodlightProviderService.CONTEXT_PI_PAYLOAD); Long broadcastHash; - broadcastHash = topology.getL2DomainId(sw.getId()) - * prime + eth.hashCode(); + broadcastHash = topology.getL2DomainId(sw.getId()) * prime1 + + pi.getInPort() * prime2 + eth.hashCode(); if (broadcastCache.update(broadcastHash)) { sw.updateBroadcastCache(broadcastHash, pi.getInPort()); return true; @@ -521,16 +522,15 @@ public abstract class ForwardingBase implements // If the feature is disabled, always return false; if (!broadcastCacheFeature) return false; - + // Get the hash of the Ethernet packet. Ethernet eth = IFloodlightProviderService.bcStore.get(cntx, IFloodlightProviderService.CONTEXT_PI_PAYLOAD); - // some FORWARD_OR_FLOOD packets are unicast with unknown destination mac - // if (eth.isBroadcast() || eth.isMulticast()) - return sw.updateBroadcastCache(new Long(eth.hashCode()), pi.getInPort()); + long hash = pi.getInPort() * prime2 + eth.hashCode(); - // return false; + // some FORWARD_OR_FLOOD packets are unicast with unknown destination mac + return sw.updateBroadcastCache(hash, pi.getInPort()); } public static boolean diff --git a/src/main/python/PythonClient.pyc b/src/main/python/PythonClient.pyc new file mode 100644 index 0000000000000000000000000000000000000000..74e21796c0214b59f7eac77f59a555ac984f9a87 Binary files /dev/null and b/src/main/python/PythonClient.pyc differ diff --git a/src/main/python/PythonServer.pyc b/src/main/python/PythonServer.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f35adf23c4ac5ad54a53e13ac0c1680709c19111 Binary files /dev/null and b/src/main/python/PythonServer.pyc differ diff --git a/src/main/python/compileall.pyc b/src/main/python/compileall.pyc new file mode 100644 index 0000000000000000000000000000000000000000..620605f5aa8dba8f01cf4a2d3c0ed6121d13a84b Binary files /dev/null and b/src/main/python/compileall.pyc differ diff --git a/src/main/python/debugserver.pyc b/src/main/python/debugserver.pyc new file mode 100644 index 0000000000000000000000000000000000000000..20978335075f593f87f73ea6011b5184e227423e Binary files /dev/null and b/src/main/python/debugserver.pyc differ