@Override public boolean updateBroadcastCache(Long entry, Short port) { if (timedCache.update(entry)) { AtomicLong count = portBroadcastCacheHitMap.get(port); if (count == null) { AtomicLong newCount = new AtomicLong(0); AtomicLong retrieved; if ((retrieved = portBroadcastCacheHitMap.putIfAbsent(port, newCount)) == null) { count = newCount; } else { count = retrieved; } } count.incrementAndGet(); return true; } else { return false; } }
protected boolean isInBroadcastCache(IOFSwitch sw, OFPacketIn pi, FloodlightContext cntx) { // Get the cluster id of the switch. // Get the hash of the Ethernet packet. if (sw == null) return true; // If the feature is disabled, always return false; if (!broadcastCacheFeature) return false; Ethernet eth = IFloodlightProviderService.bcStore.get(cntx, IFloodlightProviderService.CONTEXT_PI_PAYLOAD); Long broadcastHash; broadcastHash = topology.getL2DomainId(sw.getId()) * prime1 + pi.getInPort() * prime2 + eth.hashCode(); if (broadcastCache.update(broadcastHash)) { sw.updateBroadcastCache(broadcastHash, pi.getInPort()); return true; } else { return false; } }