Committed by
Gerrit Code Review
Push default forwarding objectives when device becomes available.
Change-Id: Ic3e54e99783ca1e01a984f86fdb754dcc7852c06
Showing
1 changed file
with
34 additions
and
13 deletions
| ... | @@ -32,6 +32,9 @@ import org.onosproject.core.CoreService; | ... | @@ -32,6 +32,9 @@ import org.onosproject.core.CoreService; |
| 32 | import org.onosproject.net.ConnectPoint; | 32 | import org.onosproject.net.ConnectPoint; |
| 33 | import org.onosproject.net.DeviceId; | 33 | import org.onosproject.net.DeviceId; |
| 34 | import org.onosproject.net.PortNumber; | 34 | import org.onosproject.net.PortNumber; |
| 35 | +import org.onosproject.net.device.DeviceEvent; | ||
| 36 | +import org.onosproject.net.device.DeviceListener; | ||
| 37 | +import org.onosproject.net.device.DeviceService; | ||
| 35 | import org.onosproject.net.flow.DefaultTrafficSelector; | 38 | import org.onosproject.net.flow.DefaultTrafficSelector; |
| 36 | import org.onosproject.net.flow.DefaultTrafficTreatment; | 39 | import org.onosproject.net.flow.DefaultTrafficTreatment; |
| 37 | import org.onosproject.net.flow.TrafficSelector; | 40 | import org.onosproject.net.flow.TrafficSelector; |
| ... | @@ -70,34 +73,36 @@ public class CordFabricManager implements FabricService { | ... | @@ -70,34 +73,36 @@ public class CordFabricManager implements FabricService { |
| 70 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 73 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
| 71 | protected FlowObjectiveService flowObjectiveService; | 74 | protected FlowObjectiveService flowObjectiveService; |
| 72 | 75 | ||
| 73 | - private static final int PRIORITY = 50000; | 76 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
| 77 | + protected DeviceService deviceService; | ||
| 74 | 78 | ||
| 75 | - private short openflowPort = 6633; | 79 | + private InternalDeviceListener deviceListener = new InternalDeviceListener(); |
| 80 | + | ||
| 81 | + private static final int PRIORITY = 50000; | ||
| 76 | 82 | ||
| 77 | private short radiusPort = 1812; | 83 | private short radiusPort = 1812; |
| 78 | 84 | ||
| 79 | private DeviceId fabricDeviceId = DeviceId.deviceId("of:5e3e486e73000187"); | 85 | private DeviceId fabricDeviceId = DeviceId.deviceId("of:5e3e486e73000187"); |
| 80 | 86 | ||
| 81 | - private ConnectPoint oltConnectPoint = | ||
| 82 | - new ConnectPoint(fabricDeviceId, PortNumber.portNumber(2)); | ||
| 83 | - private ConnectPoint oltControllerConnectPoint = | ||
| 84 | - new ConnectPoint(fabricDeviceId, PortNumber.portNumber(1)); | ||
| 85 | - private ConnectPoint radiusConnectPoint = | ||
| 86 | - new ConnectPoint(fabricDeviceId, PortNumber.portNumber(5)); | ||
| 87 | - | ||
| 88 | private final Multimap<VlanId, ConnectPoint> vlans = HashMultimap.create(); | 87 | private final Multimap<VlanId, ConnectPoint> vlans = HashMultimap.create(); |
| 89 | 88 | ||
| 90 | @Activate | 89 | @Activate |
| 91 | public void activate() { | 90 | public void activate() { |
| 92 | appId = coreService.registerApplication("org.onosproject.cordfabric"); | 91 | appId = coreService.registerApplication("org.onosproject.cordfabric"); |
| 93 | 92 | ||
| 94 | - setupDefaultFlows(); | 93 | + deviceService.addListener(deviceListener); |
| 94 | + | ||
| 95 | + if (deviceService.isAvailable(fabricDeviceId)) { | ||
| 96 | + setupDefaultFlows(); | ||
| 97 | + } | ||
| 95 | 98 | ||
| 96 | log.info("Started"); | 99 | log.info("Started"); |
| 97 | } | 100 | } |
| 98 | 101 | ||
| 99 | @Deactivate | 102 | @Deactivate |
| 100 | public void deactivate() { | 103 | public void deactivate() { |
| 104 | + deviceService.removeListener(deviceListener); | ||
| 105 | + | ||
| 101 | log.info("Stopped"); | 106 | log.info("Stopped"); |
| 102 | } | 107 | } |
| 103 | 108 | ||
| ... | @@ -112,8 +117,6 @@ public class CordFabricManager implements FabricService { | ... | @@ -112,8 +117,6 @@ public class CordFabricManager implements FabricService { |
| 112 | .punt() | 117 | .punt() |
| 113 | .build(); | 118 | .build(); |
| 114 | 119 | ||
| 115 | - | ||
| 116 | - | ||
| 117 | ForwardingObjective ofToController = DefaultForwardingObjective.builder() | 120 | ForwardingObjective ofToController = DefaultForwardingObjective.builder() |
| 118 | .fromApp(appId) | 121 | .fromApp(appId) |
| 119 | .makePermanent() | 122 | .makePermanent() |
| ... | @@ -123,7 +126,6 @@ public class CordFabricManager implements FabricService { | ... | @@ -123,7 +126,6 @@ public class CordFabricManager implements FabricService { |
| 123 | .withTreatment(forwardToController) | 126 | .withTreatment(forwardToController) |
| 124 | .add(); | 127 | .add(); |
| 125 | 128 | ||
| 126 | - | ||
| 127 | flowObjectiveService.forward(fabricDeviceId, ofToController); | 129 | flowObjectiveService.forward(fabricDeviceId, ofToController); |
| 128 | } | 130 | } |
| 129 | 131 | ||
| ... | @@ -223,4 +225,23 @@ public class CordFabricManager implements FabricService { | ... | @@ -223,4 +225,23 @@ public class CordFabricManager implements FabricService { |
| 223 | log.info("Flow objective operation failed: {}", objective); | 225 | log.info("Flow objective operation failed: {}", objective); |
| 224 | } | 226 | } |
| 225 | } | 227 | } |
| 228 | + | ||
| 229 | + /** | ||
| 230 | + * Internal listener for device service events. | ||
| 231 | + */ | ||
| 232 | + private class InternalDeviceListener implements DeviceListener { | ||
| 233 | + @Override | ||
| 234 | + public void event(DeviceEvent event) { | ||
| 235 | + switch (event.type()) { | ||
| 236 | + case DEVICE_ADDED: | ||
| 237 | + case DEVICE_AVAILABILITY_CHANGED: | ||
| 238 | + if (event.subject().id().equals(fabricDeviceId) && | ||
| 239 | + deviceService.isAvailable(event.subject().id())) { | ||
| 240 | + setupDefaultFlows(); | ||
| 241 | + } | ||
| 242 | + default: | ||
| 243 | + break; | ||
| 244 | + } | ||
| 245 | + } | ||
| 246 | + } | ||
| 226 | } | 247 | } | ... | ... |
-
Please register or login to post a comment