remove eapol rule when vlan rules are pushed.

reinstall eapol rule when vlan rule is removed.

Change-Id: I6e5f502206dacd915127d38d9309e34b20f46de4
This commit is contained in:
alshabib 2016-02-12 15:47:20 -08:00 committed by Gerrit Code Review
parent 6be7095da6
commit ea9eed9cb2

View File

@ -150,7 +150,8 @@ public class Olt
.flatMap(did -> deviceService.getPorts(did).stream()) .flatMap(did -> deviceService.getPorts(did).stream())
.filter(p -> !oltData.get(p.element().id()).uplink().equals(p.number())) .filter(p -> !oltData.get(p.element().id()).uplink().equals(p.number()))
.filter(p -> p.isEnabled()) .filter(p -> p.isEnabled())
.forEach(p -> processFilteringObjectives((DeviceId) p.element().id(), p, true)); .forEach(p -> processFilteringObjectives((DeviceId) p.element().id(),
p.number(), true));
deviceService.addListener(deviceListener); deviceService.addListener(deviceListener);
@ -232,6 +233,7 @@ public class Olt
deviceId, deviceId,
deviceVlan, deviceVlan,
subscriberVlan)); subscriberVlan));
processFilteringObjectives(deviceId, subscriberPort, true);
} else if (downStatus != null) { } else if (downStatus != null) {
log.error("Subscriber with vlan {} on device {} " + log.error("Subscriber with vlan {} on device {} " +
"on port {} failed downstream uninstallation: {}", "on port {} failed downstream uninstallation: {}",
@ -333,6 +335,8 @@ public class Olt
deviceId, deviceId,
deviceVlan, deviceVlan,
subscriberVlan)); subscriberVlan));
processFilteringObjectives(deviceId, subscriberPort, false);
} else if (downStatus != null) { } else if (downStatus != null) {
log.error("Subscriber with vlan {} on device {} " + log.error("Subscriber with vlan {} on device {} " +
"on port {} failed downstream installation: {}", "on port {} failed downstream installation: {}",
@ -346,11 +350,11 @@ public class Olt
} }
private void processFilteringObjectives(DeviceId devId, Port port, boolean install) { private void processFilteringObjectives(DeviceId devId, PortNumber port, boolean install) {
DefaultFilteringObjective.Builder builder = DefaultFilteringObjective.builder(); DefaultFilteringObjective.Builder builder = DefaultFilteringObjective.builder();
FilteringObjective eapol = (install ? builder.permit() : builder.deny()) FilteringObjective eapol = (install ? builder.permit() : builder.deny())
.withKey(Criteria.matchInPort(port.number())) .withKey(Criteria.matchInPort(port))
.addCondition(Criteria.matchEthType(EthType.EtherType.EAPOL.ethType())) .addCondition(Criteria.matchEthType(EthType.EtherType.EAPOL.ethType()))
.withMeta(DefaultTrafficTreatment.builder() .withMeta(DefaultTrafficTreatment.builder()
.setOutput(PortNumber.CONTROLLER).build()) .setOutput(PortNumber.CONTROLLER).build())
@ -388,7 +392,7 @@ public class Olt
case PORT_ADDED: case PORT_ADDED:
if (!oltData.get(devId).uplink().equals(event.port().number()) && if (!oltData.get(devId).uplink().equals(event.port().number()) &&
event.port().isEnabled()) { event.port().isEnabled()) {
processFilteringObjectives(devId, event.port(), true); processFilteringObjectives(devId, event.port().number(), true);
} }
break; break;
case PORT_REMOVED: case PORT_REMOVED:
@ -398,7 +402,7 @@ public class Olt
olt.vlan()); olt.vlan());
if (!oltData.get(devId).uplink().equals(event.port().number()) && if (!oltData.get(devId).uplink().equals(event.port().number()) &&
event.port().isEnabled()) { event.port().isEnabled()) {
processFilteringObjectives(devId, event.port(), false); processFilteringObjectives(devId, event.port().number(), false);
} }
break; break;
case PORT_UPDATED: case PORT_UPDATED:
@ -406,9 +410,9 @@ public class Olt
break; break;
} }
if (event.port().isEnabled()) { if (event.port().isEnabled()) {
processFilteringObjectives(devId, event.port(), true); processFilteringObjectives(devId, event.port().number(), true);
} else { } else {
processFilteringObjectives(devId, event.port(), false); processFilteringObjectives(devId, event.port().number(), false);
} }
break; break;
case DEVICE_ADDED: case DEVICE_ADDED:
@ -471,7 +475,8 @@ public class Olt
ports.stream() ports.stream()
.filter(p -> !oltData.get(p.element().id()).uplink().equals(p.number())) .filter(p -> !oltData.get(p.element().id()).uplink().equals(p.number()))
.filter(p -> p.isEnabled()) .filter(p -> p.isEnabled())
.forEach(p -> processFilteringObjectives((DeviceId) p.element().id(), p, true)); .forEach(p -> processFilteringObjectives((DeviceId) p.element().id(),
p.number(), true));
} }