Committed by
Gerrit Code Review
Fix deleting VLANs on fabric
Change-Id: I980656b06c88c32551e549e8fd4b355ce9042a3e
Showing
1 changed file
with
15 additions
and
4 deletions
| ... | @@ -49,6 +49,7 @@ import org.slf4j.Logger; | ... | @@ -49,6 +49,7 @@ import org.slf4j.Logger; |
| 49 | import org.slf4j.LoggerFactory; | 49 | import org.slf4j.LoggerFactory; |
| 50 | 50 | ||
| 51 | import java.util.ArrayList; | 51 | import java.util.ArrayList; |
| 52 | +import java.util.Collection; | ||
| 52 | import java.util.List; | 53 | import java.util.List; |
| 53 | import java.util.stream.Collectors; | 54 | import java.util.stream.Collectors; |
| 54 | 55 | ||
| ... | @@ -240,8 +241,13 @@ public class CordFabricManager implements FabricService { | ... | @@ -240,8 +241,13 @@ public class CordFabricManager implements FabricService { |
| 240 | 241 | ||
| 241 | @Override | 242 | @Override |
| 242 | public void removeVlan(VlanId vlanId) { | 243 | public void removeVlan(VlanId vlanId) { |
| 243 | - vlans.removeAll(vlanId) | 244 | + Collection<ConnectPoint> ports = vlans.removeAll(vlanId); |
| 244 | - .forEach(cp -> removeForwarding(vlanId, cp.deviceId(), cp.port())); | 245 | + |
| 246 | + ports.forEach(cp -> removeForwarding(vlanId, cp.deviceId(), cp.port(), | ||
| 247 | + ports.stream() | ||
| 248 | + .filter(p -> p != cp) | ||
| 249 | + .map(ConnectPoint::port) | ||
| 250 | + .collect(Collectors.toList()))); | ||
| 245 | } | 251 | } |
| 246 | 252 | ||
| 247 | @Override | 253 | @Override |
| ... | @@ -287,19 +293,24 @@ public class CordFabricManager implements FabricService { | ... | @@ -287,19 +293,24 @@ public class CordFabricManager implements FabricService { |
| 287 | flowObjectiveService.forward(deviceId, objective); | 293 | flowObjectiveService.forward(deviceId, objective); |
| 288 | } | 294 | } |
| 289 | 295 | ||
| 290 | - private void removeForwarding(VlanId vlanId, DeviceId deviceId, PortNumber inPort) { | 296 | + private void removeForwarding(VlanId vlanId, DeviceId deviceId, PortNumber inPort, |
| 297 | + List<PortNumber> outPorts) { | ||
| 291 | TrafficSelector selector = DefaultTrafficSelector.builder() | 298 | TrafficSelector selector = DefaultTrafficSelector.builder() |
| 292 | .matchVlanId(vlanId) | 299 | .matchVlanId(vlanId) |
| 293 | .matchInPort(inPort) | 300 | .matchInPort(inPort) |
| 294 | .build(); | 301 | .build(); |
| 295 | 302 | ||
| 303 | + TrafficTreatment.Builder treatmentBuilder = DefaultTrafficTreatment.builder(); | ||
| 304 | + | ||
| 305 | + outPorts.forEach(p -> treatmentBuilder.setOutput(p)); | ||
| 306 | + | ||
| 296 | ForwardingObjective objective = DefaultForwardingObjective.builder() | 307 | ForwardingObjective objective = DefaultForwardingObjective.builder() |
| 297 | .fromApp(appId) | 308 | .fromApp(appId) |
| 298 | .makePermanent() | 309 | .makePermanent() |
| 299 | .withFlag(ForwardingObjective.Flag.VERSATILE) | 310 | .withFlag(ForwardingObjective.Flag.VERSATILE) |
| 300 | .withPriority(PRIORITY) | 311 | .withPriority(PRIORITY) |
| 301 | .withSelector(selector) | 312 | .withSelector(selector) |
| 302 | - .withTreatment(DefaultTrafficTreatment.builder().build()) | 313 | + .withTreatment(treatmentBuilder.build()) |
| 303 | .remove(new ObjectiveHandler()); | 314 | .remove(new ObjectiveHandler()); |
| 304 | 315 | ||
| 305 | flowObjectiveService.forward(deviceId, objective); | 316 | flowObjectiveService.forward(deviceId, objective); | ... | ... |
-
Please register or login to post a comment