diff --git a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java index 805c930e6521d7d3d417f1a897507ea804e8ac10..8189dd2caadd010ec3f7f00a06ebb90f1ba9c58f 100755 --- a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java +++ b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java @@ -979,9 +979,15 @@ public class DeviceManagerImpl implements IDeviceManagerService, IOFMessageListe // An exception is thrown if the attachmentPoint is blocked. if (newAttachmentPoint) { attachmentPoint = getNewAttachmentPoint(nd, switchPort); - nd.addAttachmentPoint(attachmentPoint); - evHistAttachmtPt(nd, attachmentPoint.getSwitchPort(), - EvAction.ADDED, "New AP from pkt-in"); + if (attachmentPoint == null) { + newAttachmentPoint = false; + } else { + nd.addAttachmentPoint(attachmentPoint); + evHistAttachmtPt(nd, + attachmentPoint.getSwitchPort(), + EvAction.ADDED, + "New AP from pkt-in"); + } } if (clearAttachmentPoints) { @@ -1079,6 +1085,16 @@ public class DeviceManagerImpl implements IDeviceManagerService, IOFMessageListe } } + if (curAttachmentPoint != null) { + Long curDPID = curAttachmentPoint.getSwitchPort().getSw().getId(); + Short curPort = curAttachmentPoint.getSwitchPort().getPort(); + boolean sameBD = + topology.isInSameBroadcastDomain(swPort.getSw().getId(), + swPort.getPort(), + curDPID, curPort); + if (sameBD) return null; + } + // Do we have an old attachment point? DeviceAttachmentPoint attachmentPoint = device.getOldAttachmentPoint(swPort); @@ -1116,11 +1132,7 @@ public class DeviceManagerImpl implements IDeviceManagerService, IOFMessageListe // If two ports are in the same port-channel, we don't treat it // as conflict, but will forward based on the last seen switch-port if (!devMgrMaps.inSamePortChannel(swPort, - curAttachmentPoint.getSwitchPort()) && - !topology.isInSameBroadcastDomain(swPort.getSw().getId(), - swPort.getPort(), - curAttachmentPoint.getSwitchPort().getSw().getId(), - curAttachmentPoint.getSwitchPort().getPort())) { + curAttachmentPoint.getSwitchPort())) { curAttachmentPoint.setConflict(currentDate); if (curAttachmentPoint.isFlapping()) { curAttachmentPoint.setBlocked(true); diff --git a/src/main/java/net/floodlightcontroller/routing/ForwardingBase.java b/src/main/java/net/floodlightcontroller/routing/ForwardingBase.java index 4f3a47dbfb630a254ccee2f0325bccf843e72290..a3446fc7e3874c96405153e3f3f3f2f9e793d606 100644 --- a/src/main/java/net/floodlightcontroller/routing/ForwardingBase.java +++ b/src/main/java/net/floodlightcontroller/routing/ForwardingBase.java @@ -223,9 +223,6 @@ public abstract class ForwardingBase implements IOFMessageListener, IDeviceManag log.debug("pushRoute flowmod sw={} inPort={} outPort={}", new Object[] { sw, fm.getMatch().getInputPort(), ((OFActionOutput)fm.getActions().get(0)).getPort() }); - log.info("Flow mod sent: Wildcard={} match={}", - Integer.toHexString(fm.getMatch().getWildcards()), - fm.getMatch().toString()); sw.write(fm, cntx); if (doFlush) { sw.flush(); diff --git a/src/test/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImplTest.java b/src/test/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImplTest.java index e9af403a845bc7ea9dd8ddc3fa720ce788bc357c..bbf0628dda24b159fd84930b25c25b6243cb09cd 100644 --- a/src/test/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImplTest.java +++ b/src/test/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImplTest.java @@ -544,6 +544,11 @@ public class DeviceManagerImplTest extends FloodlightTestCase { .andReturn(false).atLeastOnce(); expect(mockTopology.isBroadcastDomainPort(1L, (short)2)) .andReturn(false).atLeastOnce(); + expect(mockTopology.isInSameBroadcastDomain((long)1, (short)1, + (long)1, (short)2)).andReturn(false).anyTimes(); + expect(mockTopology.isInSameBroadcastDomain((long)1, (short)2, + (long)1, (short)1)).andReturn(false).anyTimes(); + deviceManager.setTopology(mockTopology); // Start recording the replay on the mocks