+ public boolean isOtnValid(Link link, String serviceType) {
+
+ if (this.linkType != OpenroadmLinkType.OTNLINK) {
+ LOG.error("PceLink: Not an OTN link. Link is ignored {}", linkId);
+ return false;
+ }
+
+ OtnLinkType otnLinkType = link
+ .augmentation(org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.Link1.class)
+ .getOtnLinkType();
+ if (this.availableBandwidth == 0L) {
+ LOG.error("PceLink: No bandwidth available for OTN Link, link {} is ignored ", linkId);
+ return false;
+ }
+
+ long neededBW;
+ OtnLinkType neededType = null;
+ switch (serviceType) {
+ case "ODUC2":
+ if (this.usedBandwidth != 0L) {
+ return false;
+ }
+ neededBW = 200000L;
+ // Add intermediate rate otn-link-type
+ neededType = OtnLinkType.OTUC2;
+ break;
+ case "ODUC3":
+ if (this.usedBandwidth != 0L) {
+ return false;
+ }
+ neededBW = 300000L;
+ // hange otn-link-type
+ neededType = OtnLinkType.OTUC3;
+ break;
+ case "ODUC4":
+ if (this.usedBandwidth != 0L) {
+ return false;
+ }
+ neededBW = 400000L;
+ neededType = OtnLinkType.OTUC4;
+ break;
+ case "ODU4":
+ case "100GEs":
+ if (this.usedBandwidth != 0L) {
+ return false;
+ }
+ neededBW = 100000L;
+ neededType = OtnLinkType.OTU4;
+ break;
+ case "ODU2":
+ case "ODU2e":
+ neededBW = 12500L;
+ break;
+ case "ODU0":
+ neededBW = 1250L;
+ break;
+ case "ODU1":
+ neededBW = 2500L;
+ break;
+ case "100GEm":
+ neededBW = 100000L;
+ // TODO: Here link type needs to be changed, based on the line-rate
+ neededType = OtnLinkType.ODUC4;
+ break;
+ case "10GE":
+ neededBW = 10000L;
+ neededType = OtnLinkType.ODTU4;
+ break;
+ case "1GE":
+ neededBW = 1000L;
+ neededType = OtnLinkType.ODTU4;
+ break;
+ default:
+ LOG.error("PceLink: isOtnValid Link {} unsupported serviceType {} ", linkId, serviceType);
+ return false;
+ }
+
+ if ((this.availableBandwidth >= neededBW)
+ && ((neededType == null) || (neededType.equals(otnLinkType)))) {
+ LOG.info("PceLink: Selected Link {} has available bandwidth and is eligible for {} creation ",
+ linkId, serviceType);
+ }
+
+ return checkParams();
+ }
+
+ private boolean checkParams() {
+ if ((this.linkId == null) || (this.linkType == null) || (this.oppositeLink == null)) {
+ LOG.error("PceLink: No Link type or opposite link is available. Link is ignored {}", linkId);
+ return false;
+ }
+ if ((this.adminStates == null) || (this.state == null)) {
+ LOG.error("PceLink: Link is not available. Link is ignored {}", linkId);
+ return false;
+ }
+ if ((this.sourceId == null) || (this.destId == null) || (this.sourceTP == null) || (this.destTP == null)) {
+ LOG.error("PceLink: No Link source or destination is available. Link is ignored {}", linkId);
+ return false;
+ }
+ if ((this.sourceNetworkSupNodeId.equals("")) || (this.destNetworkSupNodeId.equals(""))) {
+ LOG.error("PceLink: No Link source SuppNodeID or destination SuppNodeID is available. Link is ignored {}",
+ linkId);
+ return false;
+ }
+ if ((this.sourceCLLI.equals("")) || (this.destCLLI.equals(""))) {
+ LOG.error("PceLink: No Link source CLLI or destination CLLI is available. Link is ignored {}", linkId);
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override