From ab8b0c075e055244275137f94ef809c884043ebe Mon Sep 17 00:00:00 2001 From: Jonathan Hart Date: Wed, 10 Jun 2015 14:06:51 -0700 Subject: [PATCH] Fix deleting VLANs on fabric Change-Id: I980656b06c88c32551e549e8fd4b355ce9042a3e --- .../cordfabric/CordFabricManager.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/apps/cordfabric/src/main/java/org/onosproject/cordfabric/CordFabricManager.java b/apps/cordfabric/src/main/java/org/onosproject/cordfabric/CordFabricManager.java index ab31aeea35..4549bd0978 100644 --- a/apps/cordfabric/src/main/java/org/onosproject/cordfabric/CordFabricManager.java +++ b/apps/cordfabric/src/main/java/org/onosproject/cordfabric/CordFabricManager.java @@ -49,6 +49,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.stream.Collectors; @@ -240,8 +241,13 @@ public class CordFabricManager implements FabricService { @Override public void removeVlan(VlanId vlanId) { - vlans.removeAll(vlanId) - .forEach(cp -> removeForwarding(vlanId, cp.deviceId(), cp.port())); + Collection ports = vlans.removeAll(vlanId); + + ports.forEach(cp -> removeForwarding(vlanId, cp.deviceId(), cp.port(), + ports.stream() + .filter(p -> p != cp) + .map(ConnectPoint::port) + .collect(Collectors.toList()))); } @Override @@ -287,19 +293,24 @@ public class CordFabricManager implements FabricService { flowObjectiveService.forward(deviceId, objective); } - private void removeForwarding(VlanId vlanId, DeviceId deviceId, PortNumber inPort) { + private void removeForwarding(VlanId vlanId, DeviceId deviceId, PortNumber inPort, + List outPorts) { TrafficSelector selector = DefaultTrafficSelector.builder() .matchVlanId(vlanId) .matchInPort(inPort) .build(); + TrafficTreatment.Builder treatmentBuilder = DefaultTrafficTreatment.builder(); + + outPorts.forEach(p -> treatmentBuilder.setOutput(p)); + ForwardingObjective objective = DefaultForwardingObjective.builder() .fromApp(appId) .makePermanent() .withFlag(ForwardingObjective.Flag.VERSATILE) .withPriority(PRIORITY) .withSelector(selector) - .withTreatment(DefaultTrafficTreatment.builder().build()) + .withTreatment(treatmentBuilder.build()) .remove(new ObjectiveHandler()); flowObjectiveService.forward(deviceId, objective);