alshabib
Committed by Gerrit Code Review

olt installs default flows when ports appear and/or when config is uploaded.

Change-Id: Ia91f7315dac1d3a53e2b9fbf978da77a362354c6
...@@ -60,6 +60,7 @@ import org.onosproject.olt.AccessDeviceListener; ...@@ -60,6 +60,7 @@ import org.onosproject.olt.AccessDeviceListener;
60 import org.onosproject.olt.AccessDeviceService; 60 import org.onosproject.olt.AccessDeviceService;
61 import org.slf4j.Logger; 61 import org.slf4j.Logger;
62 62
63 +import java.util.List;
63 import java.util.Map; 64 import java.util.Map;
64 import java.util.Optional; 65 import java.util.Optional;
65 import java.util.Set; 66 import java.util.Set;
...@@ -149,7 +150,7 @@ public class Olt ...@@ -149,7 +150,7 @@ public class Olt
149 .flatMap(did -> deviceService.getPorts(did).stream()) 150 .flatMap(did -> deviceService.getPorts(did).stream())
150 .filter(p -> oltData.get(p.element().id()).uplink() != p.number()) 151 .filter(p -> oltData.get(p.element().id()).uplink() != p.number())
151 .filter(p -> p.isEnabled()) 152 .filter(p -> p.isEnabled())
152 - .forEach(p -> installFilteringObjectives((DeviceId) p.element().id(), p)); 153 + .forEach(p -> processFilteringObjectives((DeviceId) p.element().id(), p, true));
153 154
154 deviceService.addListener(deviceListener); 155 deviceService.addListener(deviceListener);
155 156
...@@ -344,9 +345,10 @@ public class Olt ...@@ -344,9 +345,10 @@ public class Olt
344 345
345 } 346 }
346 347
347 - private void installFilteringObjectives(DeviceId devId, Port port) { 348 + private void processFilteringObjectives(DeviceId devId, Port port, boolean install) {
348 - FilteringObjective eapol = DefaultFilteringObjective.builder() 349 + DefaultFilteringObjective.Builder builder = DefaultFilteringObjective.builder();
349 - .permit() 350 +
351 + FilteringObjective eapol = (install ? builder.permit() : builder.deny())
350 .withKey(Criteria.matchInPort(port.number())) 352 .withKey(Criteria.matchInPort(port.number()))
351 .addCondition(Criteria.matchEthType(EthType.EtherType.EAPOL.ethType())) 353 .addCondition(Criteria.matchEthType(EthType.EtherType.EAPOL.ethType()))
352 .withMeta(DefaultTrafficTreatment.builder() 354 .withMeta(DefaultTrafficTreatment.builder()
...@@ -383,9 +385,9 @@ public class Olt ...@@ -383,9 +385,9 @@ public class Olt
383 //TODO: Port handling and bookkeeping should be inproved once 385 //TODO: Port handling and bookkeeping should be inproved once
384 // olt firmware handles correct behaviour. 386 // olt firmware handles correct behaviour.
385 case PORT_ADDED: 387 case PORT_ADDED:
386 - if (oltData.get(devId).uplink() != event.port().number() && 388 + if (!oltData.get(devId).uplink().equals(event.port().number()) &&
387 - event.port().isEnabled()) { 389 + event.port().isEnabled()) {
388 - installFilteringObjectives(devId, event.port()); 390 + processFilteringObjectives(devId, event.port(), true);
389 } 391 }
390 break; 392 break;
391 case PORT_REMOVED: 393 case PORT_REMOVED:
...@@ -393,8 +395,20 @@ public class Olt ...@@ -393,8 +395,20 @@ public class Olt
393 unprovisionSubscriber(devId, olt.uplink(), 395 unprovisionSubscriber(devId, olt.uplink(),
394 event.port().number(), 396 event.port().number(),
395 olt.vlan()); 397 olt.vlan());
398 + if (!oltData.get(devId).uplink().equals(event.port().number()) &&
399 + event.port().isEnabled()) {
400 + processFilteringObjectives(devId, event.port(), false);
401 + }
396 break; 402 break;
397 case PORT_UPDATED: 403 case PORT_UPDATED:
404 + if (oltData.get(devId).uplink().equals(event.port().number())) {
405 + break;
406 + }
407 + if (event.port().isEnabled()) {
408 + processFilteringObjectives(devId, event.port(), true);
409 + } else {
410 + processFilteringObjectives(devId, event.port(), false);
411 + }
398 break; 412 break;
399 case DEVICE_ADDED: 413 case DEVICE_ADDED:
400 post(new AccessDeviceEvent( 414 post(new AccessDeviceEvent(
...@@ -419,7 +433,6 @@ public class Olt ...@@ -419,7 +433,6 @@ public class Olt
419 break; 433 break;
420 case DEVICE_UPDATED: 434 case DEVICE_UPDATED:
421 case DEVICE_SUSPENDED: 435 case DEVICE_SUSPENDED:
422 -
423 case PORT_STATS_UPDATED: 436 case PORT_STATS_UPDATED:
424 default: 437 default:
425 return; 438 return;
...@@ -439,6 +452,7 @@ public class Olt ...@@ -439,6 +452,7 @@ public class Olt
439 networkConfig.getConfig((DeviceId) event.subject(), CONFIG_CLASS); 452 networkConfig.getConfig((DeviceId) event.subject(), CONFIG_CLASS);
440 if (config != null) { 453 if (config != null) {
441 oltData.put(config.getOlt().deviceId(), config.getOlt()); 454 oltData.put(config.getOlt().deviceId(), config.getOlt());
455 + provisionDefaultFlows((DeviceId) event.subject());
442 } 456 }
443 } 457 }
444 break; 458 break;
...@@ -450,4 +464,14 @@ public class Olt ...@@ -450,4 +464,14 @@ public class Olt
450 } 464 }
451 } 465 }
452 466
467 + private void provisionDefaultFlows(DeviceId deviceId) {
468 + List<Port> ports = deviceService.getPorts(deviceId);
469 +
470 + ports.stream()
471 + .filter(p -> !oltData.get(p.element().id()).uplink().equals(p.number()))
472 + .filter(p -> p.isEnabled())
473 + .forEach(p -> processFilteringObjectives((DeviceId) p.element().id(), p, true));
474 +
475 + }
476 +
453 } 477 }
......