diff --git a/src/main/java/net/floodlightcontroller/core/OFMessageFilterManager.java b/src/main/java/net/floodlightcontroller/core/OFMessageFilterManager.java index 777bfaf44d87997e9a4020f7beec87977e698620..43ff2e3cb16731520e8eabd93c4b342a52537468 100644 --- a/src/main/java/net/floodlightcontroller/core/OFMessageFilterManager.java +++ b/src/main/java/net/floodlightcontroller/core/OFMessageFilterManager.java @@ -77,9 +77,9 @@ public class OFMessageFilterManager protected ConcurrentHashMap<String, Long> filterTimeoutMap = null; protected Timer timer = null; - protected final int MAX_FILTERS=5; - protected final long MAX_FILTER_TIME= 300000; // maximum filter time is 5 minutes. - protected final int TIMER_INTERVAL = 1000; // 1 second time interval. + protected int MAX_FILTERS=5; + protected long MAX_FILTER_TIME= 300000; // maximum filter time is 5 minutes. + protected int TIMER_INTERVAL = 1000; // 1 second time interval. public static final String SUCCESS = "0"; public static final String FILTER_SETUP_FAILED = "-1001"; @@ -131,16 +131,16 @@ public class OFMessageFilterManager return s; // the return string is the session ID. } - public String setupFilter(String sid, ConcurrentHashMap<String,String> f, int deltaInSecond) { + public String setupFilter(String sid, ConcurrentHashMap<String,String> f, int deltaInMilliSeconds) { if (sid == null) { // Delta in filter needs to be milliseconds - log.debug("Adding new filter: {} for {} seconds", f, deltaInSecond); - return addFilter(f, deltaInSecond * 1000); + log.debug("Adding new filter: {} for {} ms", f, deltaInMilliSeconds); + return addFilter(f, deltaInMilliSeconds); } else {// this is the session id. // we will ignore the hash map features. - if (deltaInSecond > 0) - return refreshFilter(sid, deltaInSecond * 1000); + if (deltaInMilliSeconds > 0) + return refreshFilter(sid, deltaInMilliSeconds); else return deleteFilter(sid); } diff --git a/src/main/java/net/floodlightcontroller/core/web/PacketTraceResource.java b/src/main/java/net/floodlightcontroller/core/web/PacketTraceResource.java index 1a41ffc301c6702b78a8b8f484f224d1f7ba2a03..7ec59a5d6d9017f5b949be70a7fc76c1c85fe95f 100644 --- a/src/main/java/net/floodlightcontroller/core/web/PacketTraceResource.java +++ b/src/main/java/net/floodlightcontroller/core/web/PacketTraceResource.java @@ -104,8 +104,10 @@ public class PacketTraceResource extends ServerResource { setStatus(Status.CLIENT_ERROR_BAD_REQUEST); } else { log.debug ("Call setupFilter: sid:{} filter:{}, period:{}", - new Object[] {fp.getSessionId(), filter, fp.getPeriod()}); - sid = manager.setupFilter(fp.getSessionId(), filter, fp.getPeriod()); + new Object[] {fp.getSessionId(), filter, + fp.getPeriod()*1000}); + sid = manager.setupFilter(fp.getSessionId(), filter, + fp.getPeriod()*1000); output.setSessionId(sid); setStatus(Status.SUCCESS_OK); } diff --git a/src/main/java/net/floodlightcontroller/devicemanager/internal/Device.java b/src/main/java/net/floodlightcontroller/devicemanager/internal/Device.java index 9caaa9779737ce7bc856ae41929a5746cc27edb1..79022c20e24063554112993ee08ae8e1c5d1b10d 100755 --- a/src/main/java/net/floodlightcontroller/devicemanager/internal/Device.java +++ b/src/main/java/net/floodlightcontroller/devicemanager/internal/Device.java @@ -490,7 +490,9 @@ public class Device implements IDevice { @Override public String toString() { StringBuilder builder = new StringBuilder(); - builder.append("Device [entityClass="); + builder.append("Device [deviceKey="); + builder.append(deviceKey); + builder.append(", entityClass="); builder.append(entityClass.getName()); builder.append(", MAC="); builder.append(macAddressString); diff --git a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java index 7c628f8ea19a2bda33eb3ad136f343949b16651e..341a0940f59775b8dfc35a5fd47395ba99f4709b 100755 --- a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java +++ b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java @@ -1403,7 +1403,9 @@ IFlowReconcileListener, IInfoProvider, IHAListener { Iterator<Device> diter = deviceMap.values().iterator(); while (diter.hasNext()) { Device d = diter.next(); - reclassifyDevice(d); + if (d.getEntityClass() != null && + entityClassNames.contains(d.getEntityClass().getName())) + reclassifyDevice(d); } } diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkDiscovery.java b/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkDiscovery.java index 289f3d0e2528ca13aa4972119c7a50782e177d74..9bd5570e71240de0f4dac460aec075f06f2df323 100644 --- a/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkDiscovery.java +++ b/src/main/java/net/floodlightcontroller/linkdiscovery/ILinkDiscovery.java @@ -87,31 +87,31 @@ public interface ILinkDiscovery { if (operation == UpdateOperation.LINK_REMOVED) { operationString = "Link Removed"; return "LDUpdate [operation=" + operationString + - "src=" + src + ", srcPort=" + srcPort + ", src=" + src + ", srcPort=" + srcPort + ", dst=" + dst + ", dstPort=" + dstPort + ", type=" + type + "]"; } else if (operation == UpdateOperation.LINK_UPDATED) { operationString = "Link Updated"; return "LDUpdate [operation=" + operationString + - "src=" + src + ", srcPort=" + srcPort + ", src=" + src + ", srcPort=" + srcPort + ", dst=" + dst + ", dstPort=" + dstPort + ", type=" + type + "]"; } else if (operation == UpdateOperation.PORT_DOWN) { operationString = "Port Down"; return "LDUpdate [operation=" + operationString + - "src=" + src + ", srcPort=" + srcPort + "]"; + ", src=" + src + ", srcPort=" + srcPort + "]"; } else if (operation == UpdateOperation.PORT_UP) { operationString = "Port Up"; return "LDUpdate [operation=" + operationString + - "src=" + src + ", srcPort=" + srcPort + "]"; + ", src=" + src + ", srcPort=" + srcPort + "]"; } else if (operation == UpdateOperation.SWITCH_REMOVED) { operationString = "Switch Removed"; return "LDUpdate [operation=" + operationString + - "src=" + src + "]"; + ", src=" + src + "]"; } else if (operation == UpdateOperation.SWITCH_UPDATED) { operationString = "Switch Updated"; return "LDUpdate [operation=" + operationString + - "src=" + src + "]"; + ", src=" + src + "]"; } else { return "LDUpdate: Unknown update."; } diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java index d425a96ec99fe482037ff6acbfbef60e276064c5..50de0444fe1ff78c4417c251fc41cfcb4d00d45f 100644 --- a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java +++ b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java @@ -792,7 +792,7 @@ IFloodlightModule, IInfoProvider, IHAListener { if (newInfo.getUnicastValidTime() == null) addLinkToBroadcastDomain(lt); - writeLink(lt, newInfo); + writeLinkToStorage(lt, newInfo); updateOperation = UpdateOperation.LINK_UPDATED; linkChanged = true; @@ -847,7 +847,7 @@ IFloodlightModule, IInfoProvider, IHAListener { // Write changes to storage. This will always write the updated // valid time, plus the port states if they've changed (i.e. if // they weren't set to null in the previous block of code. - writeLink(lt, newInfo); + writeLinkToStorage(lt, newInfo); if (linkChanged) { updateOperation = getUpdateOperation(newInfo.getSrcPortState(), @@ -1021,7 +1021,7 @@ IFloodlightModule, IInfoProvider, IHAListener { lt.getDst(), lt.getDstPort(), getLinkType(lt, linkInfo), operation)); - writeLink(lt, linkInfo); + writeLinkToStorage(lt, linkInfo); linkInfoChanged = true; } } @@ -1281,7 +1281,7 @@ IFloodlightModule, IInfoProvider, IHAListener { * @param lt The LinkTuple to write * @param linkInfo The LinkInfo to write */ - void writeLink(Link lt, LinkInfo linkInfo) { + protected void writeLinkToStorage(Link lt, LinkInfo linkInfo) { LinkType type = getLinkType(lt, linkInfo); // Write only direct links. Do not write links to external @@ -1368,7 +1368,7 @@ IFloodlightModule, IInfoProvider, IHAListener { * Removes a link from storage using an asynchronous call. * @param lt The LinkTuple to delete. */ - void removeLinkFromStorage(Link lt) { + protected void removeLinkFromStorage(Link lt) { String id = getLinkId(lt); storageSource.deleteRowAsync(LINK_TABLE_NAME, id); } diff --git a/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java b/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java index 6b2c4a864ca6215e33f0998ab550c33f08504b75..3e6794d552e4de6b80d6f0821d426e47e24af840 100644 --- a/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java +++ b/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java @@ -343,7 +343,7 @@ public class ControllerTest extends FloodlightTestCase { // Test self timeout reset(sw); sw.cancelStatisticsReply(1); - sf = new OFStatisticsFuture(tp, sw, 1, 1, TimeUnit.SECONDS); + sf = new OFStatisticsFuture(tp, sw, 1, 75, TimeUnit.MILLISECONDS); replay(sw); ff = new FutureFetcher<List<OFStatistics>>(sf); @@ -358,15 +358,20 @@ public class ControllerTest extends FloodlightTestCase { @Test public void testMessageFilterManager() throws Exception { + class MyOFMessageFilterManager extends OFMessageFilterManager { + public MyOFMessageFilterManager(int timer_interval) { + super(); + TIMER_INTERVAL = timer_interval; + } + } FloodlightModuleContext fmCntx = new FloodlightModuleContext(); MockFloodlightProvider mfp = new MockFloodlightProvider(); - OFMessageFilterManager mfm = new OFMessageFilterManager(); + OFMessageFilterManager mfm = new MyOFMessageFilterManager(100); MockThreadPoolService mtp = new MockThreadPoolService(); fmCntx.addService(IOFMessageFilterManagerService.class, mfm); fmCntx.addService(IFloodlightProviderService.class, mfp); fmCntx.addService(IThreadPoolService.class, mtp); String sid = null; - mfm.init(fmCntx); mfm.startUp(fmCntx); @@ -378,14 +383,14 @@ public class ControllerTest extends FloodlightTestCase { for(i=mfm.getMaxFilterSize(); i > 0; --i) { filter = new ConcurrentHashMap<String,String>(); filter.put("mac", String.format("00:11:22:33:44:%d%d", i,i)); - sid = mfm.setupFilter(null, filter, 6); + sid = mfm.setupFilter(null, filter, 60); assertTrue(mfm.getNumberOfFilters() == mfm.getMaxFilterSize() - i +1); } // Add one more to see if you can't filter = new ConcurrentHashMap<String,String>(); filter.put("mac", "mac2"); - mfm.setupFilter(null, filter, 10); + mfm.setupFilter(null, filter, 10*1000); assertTrue(mfm.getNumberOfFilters() == mfm.getMaxFilterSize()); @@ -465,9 +470,9 @@ public class ControllerTest extends FloodlightTestCase { matchedFilters = mfm.getMatchedFilters(packetOut, cntx); assertTrue(matchedFilters.size() == 1); - // Wait for 8 seconds for all filters to be timed out. - Thread.sleep(8000); - assertTrue(mfm.getNumberOfFilters() == 0); + // Wait for all filters to be timed out. + Thread.sleep(150); + assertEquals(0, mfm.getNumberOfFilters()); } @Test @@ -486,7 +491,7 @@ public class ControllerTest extends FloodlightTestCase { //expect(oldsw.getFeaturesReply()).andReturn(new OFFeaturesReply()).anyTimes(); //expect(oldsw.getStringId()).andReturn("00:00:00:00:00:00:00").anyTimes(); - Channel channel = createMock(Channel.class); + Channel channel = createNiceMock(Channel.class); //expect(oldsw.getChannel()).andReturn(channel); oldsw.setChannel(channel); expect(channel.close()).andReturn(null);