Naoki Shiota

bug fixes about OpticalPathProvisioner:

- Made optical domain path computation to take care of capacity of optical channel.
- Removed hard coded signal types.
- Rebased to new optical device/port implementation.

Change-Id: I8e030fee83c5a05a51bef470363e247ac8943ab7
...@@ -40,12 +40,10 @@ import org.onosproject.newoptical.api.OpticalPathListener; ...@@ -40,12 +40,10 @@ import org.onosproject.newoptical.api.OpticalPathListener;
40 import org.onosproject.newoptical.api.OpticalPathService; 40 import org.onosproject.newoptical.api.OpticalPathService;
41 import org.onosproject.event.AbstractListenerManager; 41 import org.onosproject.event.AbstractListenerManager;
42 import org.onosproject.mastership.MastershipService; 42 import org.onosproject.mastership.MastershipService;
43 -import org.onosproject.net.CltSignalType;
44 import org.onosproject.net.ConnectPoint; 43 import org.onosproject.net.ConnectPoint;
45 import org.onosproject.net.Device; 44 import org.onosproject.net.Device;
46 import org.onosproject.net.DeviceId; 45 import org.onosproject.net.DeviceId;
47 import org.onosproject.net.Link; 46 import org.onosproject.net.Link;
48 -import org.onosproject.net.OduSignalType;
49 import org.onosproject.net.Path; 47 import org.onosproject.net.Path;
50 import org.onosproject.net.Port; 48 import org.onosproject.net.Port;
51 import org.onosproject.net.config.NetworkConfigService; 49 import org.onosproject.net.config.NetworkConfigService;
...@@ -87,6 +85,7 @@ import java.util.stream.Stream; ...@@ -87,6 +85,7 @@ import java.util.stream.Stream;
87 85
88 import static com.google.common.base.Preconditions.checkArgument; 86 import static com.google.common.base.Preconditions.checkArgument;
89 import static com.google.common.base.Preconditions.checkNotNull; 87 import static com.google.common.base.Preconditions.checkNotNull;
88 +import static org.onosproject.net.optical.device.OpticalDeviceServiceView.opticalView;
90 89
91 /** 90 /**
92 * Main component to configure optical connectivity. 91 * Main component to configure optical connectivity.
...@@ -149,6 +148,7 @@ public class OpticalPathProvisioner ...@@ -149,6 +148,7 @@ public class OpticalPathProvisioner
149 148
150 @Activate 149 @Activate
151 protected void activate() { 150 protected void activate() {
151 + deviceService = opticalView(deviceService);
152 appId = coreService.registerApplication("org.onosproject.newoptical"); 152 appId = coreService.registerApplication("org.onosproject.newoptical");
153 153
154 idCounter = storageService.atomicCounterBuilder() 154 idCounter = storageService.atomicCounterBuilder()
...@@ -360,12 +360,18 @@ public class OpticalPathProvisioner ...@@ -360,12 +360,18 @@ public class OpticalPathProvisioner
360 Port dstPort = deviceService.getPort(dst.getKey().deviceId(), dst.getKey().port()); 360 Port dstPort = deviceService.getPort(dst.getKey().deviceId(), dst.getKey().port());
361 361
362 if (srcPort instanceof OduCltPort && dstPort instanceof OduCltPort) { 362 if (srcPort instanceof OduCltPort && dstPort instanceof OduCltPort) {
363 + OduCltPort srcOCPort = (OduCltPort) srcPort;
364 + OduCltPort dstOCPort = (OduCltPort) dstPort;
365 + if (!srcOCPort.signalType().equals(dstOCPort.signalType())) {
366 + continue;
367 + }
368 +
363 // Create OTN circuit 369 // Create OTN circuit
364 OpticalCircuitIntent circuitIntent = OpticalCircuitIntent.builder() 370 OpticalCircuitIntent circuitIntent = OpticalCircuitIntent.builder()
365 .appId(appId) 371 .appId(appId)
366 .src(src.getKey()) 372 .src(src.getKey())
367 .dst(dst.getKey()) 373 .dst(dst.getKey())
368 - .signalType(CltSignalType.CLT_10GBE) 374 + .signalType(srcOCPort.signalType())
369 .bidirectional(true) 375 .bidirectional(true)
370 .build(); 376 .build();
371 intents.add(circuitIntent); 377 intents.add(circuitIntent);
...@@ -374,13 +380,18 @@ public class OpticalPathProvisioner ...@@ -374,13 +380,18 @@ public class OpticalPathProvisioner
374 connectivity.addRealizingLink(pLink); 380 connectivity.addRealizingLink(pLink);
375 linkPathMap.put(pLink, connectivity); 381 linkPathMap.put(pLink, connectivity);
376 } else if (srcPort instanceof OchPort && dstPort instanceof OchPort) { 382 } else if (srcPort instanceof OchPort && dstPort instanceof OchPort) {
383 + OchPort srcOchPort = (OchPort) srcPort;
384 + OchPort dstOchPort = (OchPort) dstPort;
385 + if (!srcOchPort.signalType().equals(dstOchPort.signalType())) {
386 + continue;
387 + }
388 +
377 // Create lightpath 389 // Create lightpath
378 - // FIXME: hardcoded ODU signal type
379 OpticalConnectivityIntent opticalIntent = OpticalConnectivityIntent.builder() 390 OpticalConnectivityIntent opticalIntent = OpticalConnectivityIntent.builder()
380 .appId(appId) 391 .appId(appId)
381 .src(src.getKey()) 392 .src(src.getKey())
382 .dst(dst.getKey()) 393 .dst(dst.getKey())
383 - .signalType(OduSignalType.ODU4) 394 + .signalType(srcOchPort.signalType())
384 .bidirectional(true) 395 .bidirectional(true)
385 .build(); 396 .build();
386 intents.add(opticalIntent); 397 intents.add(opticalIntent);
...@@ -533,18 +544,26 @@ public class OpticalPathProvisioner ...@@ -533,18 +544,26 @@ public class OpticalPathProvisioner
533 544
534 private boolean hasEnoughBandwidth(ConnectPoint cp) { 545 private boolean hasEnoughBandwidth(ConnectPoint cp) {
535 if (cp.elementId() instanceof DeviceId) { 546 if (cp.elementId() instanceof DeviceId) {
536 - Device.Type type = deviceService.getDevice(cp.deviceId()).type(); 547 + Device device = deviceService.getDevice(cp.deviceId());
548 + Device.Type type = device.type();
549 +
537 if (isTransportLayer(type)) { 550 if (isTransportLayer(type)) {
538 - // Optical ports are assumed to have enough bandwidth 551 + // Check if the port has enough capacity
539 - // TODO should look up physical limit? 552 + Port port = deviceService.getPort(cp.deviceId(), cp.port());
553 + if (port instanceof OduCltPort || port instanceof OchPort) {
554 + // Port with capacity
555 + return bandwidth.bps() < port.portSpeed() * 1000000.0;
556 + } else {
557 + // Port without valid capacity (OMS port, etc.)
540 return true; 558 return true;
541 } 559 }
542 - 560 + } else {
561 + // Check if enough amount of bandwidth resource remains
543 ContinuousResource resource = Resources.continuous(cp.deviceId(), cp.port(), Bandwidth.class) 562 ContinuousResource resource = Resources.continuous(cp.deviceId(), cp.port(), Bandwidth.class)
544 .resource(bandwidth.bps()); 563 .resource(bandwidth.bps());
545 -
546 return resourceService.isAvailable(resource); 564 return resourceService.isAvailable(resource);
547 } 565 }
566 + }
548 return false; 567 return false;
549 } 568 }
550 } 569 }
......