@Override public void updatePktRemoteFMCounterStoreLocal(IOFSwitch sw, OFMessage m) { String countersKey = this.getCountersKey(sw, m, null); Map<String, MutableInt> pktremote_buffer = this.pktremote_local_buffer.get(); MutableInt currval = pktremote_buffer.get(countersKey); if (currval == null) { this.getPktRemoteFMCounters(sw, m); // create counters as side effect (if required) currval = new MutableInt(); pktremote_buffer.put(countersKey, currval); } currval.increment(); return; }
@Override public void updatePacketInCountersLocal(IOFSwitch sw, OFMessage m, Ethernet eth) { if (((OFPacketIn) m).getPacketData().length <= 0) { return; } String countersKey = this.getCountersKey(sw, m, eth); Map<String, MutableInt> pktin_buffer = this.pktin_local_buffer.get(); MutableInt currval = pktin_buffer.get(countersKey); if (currval == null) { this.getPacketInCounters(sw, m, eth); // create counters as side effect (if required) currval = new MutableInt(); pktin_buffer.put(countersKey, currval); } currval.increment(); return; }
@Override public void updateFlush() { Date date = new Date(); Map<String, MutableInt> pktin_buffer = this.pktin_local_buffer.get(); for (String key : pktin_buffer.keySet()) { MutableInt currval = pktin_buffer.get(key); int delta = currval.get(); if (delta > 0) { List<ICounter> counters = this.pktinCounters.get(key); if (counters != null) { for (ICounter c : counters) { c.increment(date, delta); } } } } // We could do better "GC" of counters that have not been update "recently" pktin_buffer.clear(); Map<String, MutableInt> pktout_buffer = this.pktout_local_buffer.get(); for (String key : pktout_buffer.keySet()) { MutableInt currval = pktout_buffer.get(key); int delta = currval.get(); if (delta > 0) { List<ICounter> counters = this.pktoutCounters.get(key); if (counters != null) { for (ICounter c : counters) { c.increment(date, delta); } } } } // We could do better "GC" of counters that have not been update "recently" pktout_buffer.clear(); }