From a551290bf57dd14abc7f0d98b60c4c39534519ce Mon Sep 17 00:00:00 2001 From: Srinivasan Ramasubramanian <srini@bigswitch.com> Date: Sun, 1 Apr 2012 11:48:33 -0700 Subject: [PATCH] If the incoming node port is blocked, allow only unicast and BDDP packets to continue down the processing chain. --- .../internal/DeviceManagerImpl.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java index f69e83ec5..2a121bf31 100755 --- a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java +++ b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java @@ -821,14 +821,18 @@ public class DeviceManagerImpl implements IDeviceManagerService, IOFMessageListe // in this situation. short pinPort = pi.getInPort(); long pinSw = sw.getId(); - if (eth.getEtherType() != Ethernet.TYPE_BDDP && - topology.isAllowed(pinSw, pinPort) == false) { - if (log.isDebugEnabled()) { - log.debug("deviceManager: Stopping packet as it is coming" + - "in on a port blocked by higher layer on." + - "switch ={}, port={}", new Object[] {sw.getStringId(), pinPort}); + if (topology.isAllowed(pinSw, pinPort) == false) { + if (eth.getEtherType() != Ethernet.TYPE_BDDP || + eth.isMulticast() == false) { + return Command.CONTINUE; + } else { + if (log.isDebugEnabled()) { + log.debug("deviceManager: Stopping packet as it is coming" + + "in on a port blocked by higher layer on." + + "switch ={}, port={}", new Object[] {sw.getStringId(), pinPort}); + } + return Command.STOP; } - return Command.STOP; } Command ret = Command.CONTINUE; -- GitLab