2 * Copyright © 2023 Orange, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.transportpce.tapi.topology;
10 import java.nio.charset.Charset;
11 import java.util.ArrayList;
12 import java.util.Collection;
13 import java.util.HashMap;
14 import java.util.HashSet;
15 import java.util.List;
18 import java.util.UUID;
19 import java.util.stream.Collectors;
20 import org.opendaylight.transportpce.tapi.TapiStringConstants;
21 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1;
22 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
23 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
24 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.OduSwitchingPools;
25 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.OduSwitchingPoolsBuilder;
26 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList;
27 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListBuilder;
28 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListKey;
29 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmNodeType;
30 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmTpType;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.xpdr.tp.supported.interfaces.SupportedInterfaceCapability;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.Node1;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPoint;
36 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.AdministrativeState;
37 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Direction;
38 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LayerProtocolName;
39 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LifecycleState;
40 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OperationalState;
41 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.PortRole;
42 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid;
43 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.capacity.pac.AvailableCapacityBuilder;
44 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.capacity.pac.TotalPotentialCapacityBuilder;
45 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.Name;
46 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameBuilder;
47 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameKey;
48 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePoint;
49 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointBuilder;
50 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointKey;
51 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU0;
52 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU2;
53 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU2E;
54 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU4;
55 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE100GigE;
56 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE10GigELAN;
57 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPEGigE;
58 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTS;
59 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTSiMC;
60 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.FORWARDINGRULEMAYFORWARDACROSSGROUP;
61 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.RuleType;
62 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroup;
63 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroupBuilder;
64 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroupKey;
65 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePoint;
66 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointBuilder;
67 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointKey;
68 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.RiskParameterPac;
69 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.RiskParameterPacBuilder;
70 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePoint;
71 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointBuilder;
72 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointKey;
73 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstances;
74 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstancesBuilder;
75 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.Rule;
76 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.RuleBuilder;
77 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.RuleKey;
78 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.risk.parameter.pac.RiskCharacteristic;
79 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.risk.parameter.pac.RiskCharacteristicBuilder;
80 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Link;
81 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.LinkKey;
82 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeBuilder;
83 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey;
84 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.cost.pac.CostCharacteristic;
85 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.cost.pac.CostCharacteristicBuilder;
86 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.timing.pac.LatencyCharacteristic;
87 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.timing.pac.LatencyCharacteristicBuilder;
88 import org.opendaylight.yangtools.yang.common.Uint16;
89 import org.opendaylight.yangtools.yang.common.Uint64;
90 import org.slf4j.Logger;
91 import org.slf4j.LoggerFactory;
94 public class ConvertORToTapiTopology {
96 private static final Logger LOG = LoggerFactory.getLogger(ConvertORToTapiTopology.class);
97 private String ietfNodeId;
98 private OpenroadmNodeType ietfNodeType;
99 private AdminStates ietfNodeAdminState;
100 private State ietfNodeOperState;
101 private List<TerminationPoint> oorClientPortList;
102 private List<TerminationPoint> oorNetworkPortList;
103 private OduSwitchingPools oorOduSwitchingPool;
104 private Uuid tapiTopoUuid;
105 private Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node>
107 private Map<LinkKey, Link> tapiLinks;
108 private Map<ServiceInterfacePointKey, ServiceInterfacePoint> tapiSips;
109 private Map<String, Uuid> uuidMap;
112 public ConvertORToTapiTopology(Uuid tapiTopoUuid) {
113 this.tapiTopoUuid = tapiTopoUuid;
114 this.tapiNodes = new HashMap<>();
115 this.tapiLinks = new HashMap<>();
116 this.uuidMap = new HashMap<>();
117 this.tapiSips = new HashMap<>();
120 public void convertNode(Node ietfNode, List<String> networkPorts) {
121 this.ietfNodeId = ietfNode.getNodeId().getValue();
122 if (ietfNode.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class)
126 this.ietfNodeType = ietfNode.augmentation(
127 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class).getNodeType();
128 this.ietfNodeAdminState = ietfNode.augmentation(
129 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class)
130 .getAdministrativeState();
131 this.ietfNodeOperState = ietfNode.augmentation(
132 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class)
133 .getOperationalState();
134 this.oorNetworkPortList = ietfNode.augmentation(
135 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
136 .getTerminationPoint().values().stream()
137 .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
138 == OpenroadmTpType.XPONDERNETWORK.getIntValue()
139 && networkPorts.contains(tp.getTpId().getValue()))
140 .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
141 .collect(Collectors.toList());
142 if (!OpenroadmNodeType.TPDR.equals(this.ietfNodeType)) {
143 this.oorOduSwitchingPool = ietfNode.augmentation(Node1.class).getSwitchingPools().getOduSwitchingPools()
144 .values().stream().findFirst().orElseThrow();
145 this.oorClientPortList = ietfNode.augmentation(
146 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
147 .getTerminationPoint().values().stream()
148 .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
149 == OpenroadmTpType.XPONDERCLIENT.getIntValue())
150 .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
151 .collect(Collectors.toList());
153 this.oorOduSwitchingPool = createOduSwitchingPoolForTp100G();
154 List<TpId> tpList = this.oorOduSwitchingPool.getNonBlockingList().values().stream()
155 .flatMap(nbl -> nbl.getTpList().stream())
156 .collect(Collectors.toList());
157 this.oorClientPortList = ietfNode.augmentation(
158 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
159 .getTerminationPoint().values().stream()
160 .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
161 == OpenroadmTpType.XPONDERCLIENT.getIntValue() && tpList.contains(tp.getTpId()))
162 .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
163 .collect(Collectors.toList());
164 this.oorClientPortList.forEach(tp -> LOG.info("tp = {}", tp.getTpId()));
167 // node creation [DSR/ODU] ([DSR/ODU] and OTSI merged in R 2.4.X)
168 LOG.info("creation of a DSR/ODU node for {}", this.ietfNodeId);
169 Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", this.ietfNodeId,
170 TapiStringConstants.XPDR)).getBytes(Charset.forName("UTF-8"))).toString());
171 this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.XPDR), nodeUuid);
172 Name nameDsr = new NameBuilder().setValueName("dsr/odu node name")
173 .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.XPDR)).build();
174 Name namePhot = new NameBuilder().setValueName("otsi node name")
175 .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.XPDR)).build();
176 Name nameNodeType = new NameBuilder().setValueName("Node Type")
177 .setValue(this.ietfNodeType.getName()).build();
178 Set<LayerProtocolName> dsrLayerProtocols = Set.of(LayerProtocolName.DSR, LayerProtocolName.ODU,
179 LayerProtocolName.DIGITALOTN,LayerProtocolName.PHOTONICMEDIA);
180 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology
181 .Node dsrNode = createTapiNode(Map.of(nameDsr.key(), nameDsr, namePhot.key(), namePhot,nameNodeType.key(),
182 nameNodeType), dsrLayerProtocols);
183 LOG.debug("XPDR Node {} should have {} NEPs and SIPs", this.ietfNodeId,
184 this.oorClientPortList.size() + this.oorNetworkPortList.size());
185 LOG.info("XPDR Node {} has {} NEPs and {} SIPs", this.ietfNodeId,
186 dsrNode.getOwnedNodeEdgePoint().values().size(), dsrNode.getOwnedNodeEdgePoint().values().stream()
187 .filter(nep -> nep.getMappedServiceInterfacePoint() != null).count());
188 tapiNodes.put(dsrNode.key(), dsrNode);
191 public Map<NodeRuleGroupKey, NodeRuleGroup> createNodeRuleGroupForRdmNode(String topoType, Uuid nodeUuid,
192 String orNodeId, Collection<OwnedNodeEdgePoint> onepl) {
193 Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePointKey,
194 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint>
195 nepMap = new HashMap<>();
196 for (OwnedNodeEdgePoint onep : onepl) {
197 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint
198 nep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group
199 .NodeEdgePointBuilder()
200 .setTopologyUuid(tapiTopoUuid)
201 .setNodeUuid(nodeUuid)
202 .setNodeEdgePointUuid(onep.key().getUuid())
204 nepMap.put(nep.key(), nep);
207 topoType.equals("Abstracted")
208 ? "rdm infra node rule group"
209 : orNodeId + " node rule group";
210 Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupMap = new HashMap<>();
211 Set<RuleType> ruleTypes = new HashSet<>();
212 ruleTypes.add(RuleType.FORWARDING);
213 Map<RuleKey, Rule> ruleList = new HashMap<>();
214 Rule rule = new RuleBuilder()
215 .setLocalId("forward")
216 .setForwardingRule(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE)
217 .setRuleType(ruleTypes)
219 ruleList.put(rule.key(), rule);
220 NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder()
221 .setUuid(new Uuid(UUID.nameUUIDFromBytes((rdmName)
222 .getBytes(Charset.forName("UTF-8"))).toString()))
224 .setNodeEdgePoint(nepMap)
226 nodeRuleGroupMap.put(nodeRuleGroup.key(), nodeRuleGroup);
227 return nodeRuleGroupMap;
230 public Map<MappedServiceInterfacePointKey, MappedServiceInterfacePoint> createMSIP(int nb,
231 LayerProtocolName layerProtocol, String tpId, String nodeid,
232 Collection<SupportedInterfaceCapability> supportedInterfaceCapability,
233 OperationalState operState, AdministrativeState adminState) {
234 // add them to SIP context
235 Map<MappedServiceInterfacePointKey, MappedServiceInterfacePoint> msipl = new HashMap<>();
236 for (int i = 0; i < nb; i++) {
239 ? String.join("+", "SIP", nodeid, tpId)
240 : String.join("+", "SIP", nodeid, tpId,"Nber", String.valueOf(i));
241 LOG.info("SIP = {}", sipName);
242 Uuid sipUuid = new Uuid(UUID.nameUUIDFromBytes(sipName.getBytes(Charset.forName("UTF-8"))).toString());
243 MappedServiceInterfacePoint msip = new MappedServiceInterfacePointBuilder()
244 .setServiceInterfacePointUuid(sipUuid).build();
245 ServiceInterfacePoint sip = createSIP(sipUuid, layerProtocol, tpId, nodeid, supportedInterfaceCapability,
246 operState, adminState);
247 this.tapiSips.put(sip.key(), sip);
248 msipl.put(msip.key(), msip);
249 LOG.debug("SIP created {}", sip.getUuid());
250 LOG.debug("This SIP corresponds to SIP+nodeId {} + TpId {}", nodeid, tpId);
255 public List<SupportedCepLayerProtocolQualifierInstances> createSupportedCepLayerProtocolQualifier(
256 Collection<SupportedInterfaceCapability> sicList, LayerProtocolName lpn) {
257 List<SupportedCepLayerProtocolQualifierInstances> sclpqiList = new ArrayList<>();
258 if (sicList == null) {
259 sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
260 .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
261 .setNumberOfCepInstances(Uint64.valueOf(1))
265 LOG.debug("SIC list = {}", sicList);
266 for (SupportedInterfaceCapability sic : sicList) {
267 String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
268 switch (lpn.getName()) {
272 // TODO: it may be needed to add more cases clauses if the interface capabilities of a
273 // port are extended in the config file
275 sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
276 .setLayerProtocolQualifier(ODUTYPEODU0.VALUE)
277 .setNumberOfCepInstances(Uint64.valueOf(0))
279 sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
280 .setLayerProtocolQualifier(DIGITALSIGNALTYPEGigE.VALUE)
281 .setNumberOfCepInstances(Uint64.valueOf(0))
285 sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
286 .setLayerProtocolQualifier(ODUTYPEODU2E.VALUE)
287 .setNumberOfCepInstances(Uint64.valueOf(0))
289 sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
290 .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE)
291 .setNumberOfCepInstances(Uint64.valueOf(0))
295 sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
296 .setLayerProtocolQualifier(ODUTYPEODU2.VALUE)
297 .setNumberOfCepInstances(Uint64.valueOf(0))
299 sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
300 .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE)
301 .setNumberOfCepInstances(Uint64.valueOf(0))
305 sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
306 .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE)
307 .setNumberOfCepInstances(Uint64.valueOf(0))
311 sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
312 .setLayerProtocolQualifier(DIGITALSIGNALTYPE100GigE.VALUE)
313 .setNumberOfCepInstances(Uint64.valueOf(0))
315 sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
316 .setLayerProtocolQualifier(ODUTYPEODU4.VALUE)
317 .setNumberOfCepInstances(Uint64.valueOf(0))
321 sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
322 .setLayerProtocolQualifier(DIGITALSIGNALTYPE100GigE.VALUE)
323 .setNumberOfCepInstances(Uint64.valueOf(0))
326 case "IfOCHOTU4ODU4":
328 sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
329 .setLayerProtocolQualifier(ODUTYPEODU4.VALUE)
330 .setNumberOfCepInstances(Uint64.valueOf(0))
334 LOG.error("IfCapability type not managed");
340 // TODO: it may be needed to add more cases clauses if the interface capabilities of a
341 // port are extended in the config file
343 sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
344 .setLayerProtocolQualifier(ODUTYPEODU0.VALUE)
345 .setNumberOfCepInstances(Uint64.valueOf(0))
349 sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
350 .setLayerProtocolQualifier(ODUTYPEODU2E.VALUE)
351 .setNumberOfCepInstances(Uint64.valueOf(0))
356 sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
357 .setLayerProtocolQualifier(ODUTYPEODU2.VALUE)
358 .setNumberOfCepInstances(Uint64.valueOf(0))
363 case "IfOCHOTU4ODU4":
365 sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
366 .setLayerProtocolQualifier(ODUTYPEODU4.VALUE)
367 .setNumberOfCepInstances(Uint64.valueOf(0))
371 LOG.error("IfCapability type not managed");
375 case "PHOTONIC_MEDIA":
376 if (ifCapType.equals("IfOCHOTU4ODU4") || ifCapType.equals("IfOCH")) {
377 sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
378 .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE)
379 .setNumberOfCepInstances(Uint64.valueOf(0))
381 sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
382 .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
383 .setNumberOfCepInstances(Uint64.valueOf(0))
388 LOG.error("Layer Protocol Name is unknown {}", lpn.getName());
392 return sclpqiList.stream().distinct().toList();
395 private OduSwitchingPools createOduSwitchingPoolForTp100G() {
396 Map<NonBlockingListKey, NonBlockingList> nblMap = new HashMap<>();
398 for (TerminationPoint tp : this.oorNetworkPortList) {
399 TpId tpid1 = tp.getTpId();
400 TpId tpid2 = tp.augmentation(
401 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1.class)
402 .getAssociatedConnectionMapTp().iterator().next();
403 Set<TpId> tpList = new HashSet<>();
406 NonBlockingList nbl = new NonBlockingListBuilder()
407 .setNblNumber(Uint16.valueOf(count))
410 nblMap.put(nbl.key(), nbl);
413 return new OduSwitchingPoolsBuilder()
414 .setNonBlockingList(nblMap)
415 .setSwitchingPoolNumber(Uint16.valueOf(1))
419 private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node
420 createTapiNode(Map<NameKey, Name> nodeNames, Set<LayerProtocolName> layerProtocols) {
421 Uuid nodeUuid = null;
422 Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl = new HashMap<>();
423 Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList = new HashMap<>();
424 Map<RuleKey, Rule> ruleList = new HashMap<>();
425 Set<RuleType> ruleTypes = new HashSet<>();
426 ruleTypes.add(RuleType.FORWARDING);
427 Rule rule = new RuleBuilder()
428 .setLocalId("forward")
429 .setForwardingRule(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE)
430 .setRuleType(ruleTypes)
432 ruleList.put(rule.key(), rule);
433 if (layerProtocols.contains(LayerProtocolName.DSR)
434 || layerProtocols.contains(LayerProtocolName.PHOTONICMEDIA)) {
435 nodeUuid = getNodeUuid4Dsr(onepl, nodeRuleGroupList, ruleList);
437 LOG.error("Undefined LayerProtocolName for {} node {}", nodeNames.get(nodeNames.keySet().iterator().next())
438 .getValueName(), nodeNames.get(nodeNames.keySet().iterator().next()).getValue());
440 // Empty random creation of mandatory fields for avoiding errors....
441 CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
442 .setCostAlgorithm("Restricted Shortest Path - RSP")
443 .setCostName("HOP_COUNT")
444 .setCostValue(TapiStringConstants.COST_HOP_VALUE)
446 LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
447 .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE)
448 .setQueuingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE)
449 .setJitterCharacteristic(TapiStringConstants.JITTER_VALUE)
450 .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE)
451 .setTrafficPropertyName("FIXED_LATENCY")
453 RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder()
454 .setRiskCharacteristicName("risk characteristic")
455 .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2"))
457 RiskParameterPac riskParamPac = new RiskParameterPacBuilder()
458 .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic))
460 return new NodeBuilder()
463 .setLayerProtocolName(layerProtocols)
464 .setAdministrativeState(transformAsToTapiAdminState(this.ietfNodeAdminState.getName()))
465 .setOperationalState(transformOsToTapiOperationalState(this.ietfNodeOperState.getName()))
466 .setLifecycleState(LifecycleState.INSTALLED)
467 .setOwnedNodeEdgePoint(onepl)
468 .setNodeRuleGroup(nodeRuleGroupList)
469 .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
470 .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
471 .setRiskParameterPac(riskParamPac)
472 .setErrorCharacteristic("error")
473 .setLossCharacteristic("loss")
474 .setRepeatDeliveryCharacteristic("repeat delivery")
475 .setDeliveryOrderCharacteristic("delivery order")
476 .setUnavailableTimeCharacteristic("unavailable time")
477 .setServerIntegrityProcessCharacteristic("server integrity process")
481 private Uuid getNodeUuid4Dsr(Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl,
482 Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList, Map<RuleKey, Rule> ruleList) {
484 nodeUuid = this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.XPDR));
485 // client NEP DSR creation on DSR/ODU node
486 for (int i = 0; i < oorClientPortList.size(); i++) {
487 Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(
488 (String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
489 oorClientPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString());
490 LOG.info("NEP = {} has Uuid {} ", String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
491 oorClientPortList.get(i).getTpId().getValue()), nepUuid);
492 this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
493 oorClientPortList.get(i).getTpId().getValue()), nepUuid);
494 NameBuilder nameBldr = new NameBuilder().setValue(
495 String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
496 oorClientPortList.get(i).getTpId().getValue()));
498 if (OpenroadmNodeType.TPDR.equals(this.ietfNodeType)) {
499 name = nameBldr.setValueName("100G-tpdr").build();
501 name = nameBldr.setValueName("NodeEdgePoint_C").build();
504 OwnedNodeEdgePoint onep = createNep(oorClientPortList.get(i), Map.of(name.key(), name),
505 LayerProtocolName.DSR, LayerProtocolName.DSR, true, String.join("+", this.ietfNodeId,
506 TapiStringConstants.DSR));
507 onepl.put(onep.key(), onep);
509 // CLIENT NEP E_ODU creation on DSR/ODU node
510 for (int i = 0; i < oorClientPortList.size(); i++) {
511 Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes(
512 (String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU,
513 oorClientPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString());
514 LOG.info("NEP = {} has Uuid {} ", String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU,
515 oorClientPortList.get(i).getTpId().getValue()), nepUuid1);
516 this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU,
517 oorClientPortList.get(i).getTpId().getValue()), nepUuid1);
518 Name onedName = new NameBuilder()
519 .setValueName("eNodeEdgePoint_N")
520 .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU,
521 oorClientPortList.get(i).getTpId().getValue()))
524 OwnedNodeEdgePoint onep = createNep(oorClientPortList.get(i), Map.of(onedName.key(), onedName),
525 LayerProtocolName.ODU, LayerProtocolName.DSR, false, String.join("+", this.ietfNodeId,
526 TapiStringConstants.E_ODU));
527 onepl.put(onep.key(), onep);
529 // NETWORK NEPs I_ODU creation on DSR/ODU node
530 for (int i = 0; i < oorNetworkPortList.size(); i++) {
531 Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes(
532 (String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU,
533 oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString());
534 LOG.info("NEP = {} has Uuid {} ", String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU,
535 oorNetworkPortList.get(i).getTpId().getValue()), nepUuid1);
536 this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU,
537 oorNetworkPortList.get(i).getTpId().getValue()), nepUuid1);
538 Name onedName = new NameBuilder()
539 .setValueName("iNodeEdgePoint_N")
540 .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU,
541 oorNetworkPortList.get(i).getTpId().getValue()))
544 OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName),
545 LayerProtocolName.ODU, LayerProtocolName.DSR, true, String.join("+", this.ietfNodeId,
546 TapiStringConstants.I_ODU));
547 onepl.put(onep.key(), onep);
549 // NETWORK NEP OTS network on DSR/ODU node
550 for (int i = 0; i < oorNetworkPortList.size(); i++) {
551 Uuid nepUuid2 = new Uuid(UUID.nameUUIDFromBytes(
552 (String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS,
553 oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8")))
555 LOG.info("NEP = {} has Uuid {} ", String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS,
556 oorNetworkPortList.get(i).getTpId().getValue()), nepUuid2);
557 this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS,
558 oorNetworkPortList.get(i).getTpId().getValue()), nepUuid2);
559 Name onedName = new NameBuilder()
560 .setValueName("eNodeEdgePoint")
561 .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS,
562 oorNetworkPortList.get(i).getTpId().getValue()))
565 OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName),
566 LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true,
567 String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS));
568 onepl.put(onep.key(), onep);
570 // NETWORK NEP OTSI_MC network nep creation
571 //TODO: add test to see if wavelength is provionned and condition this creation to this!
572 for (int i = 0; i < oorNetworkPortList.size(); i++) {
573 Uuid nepUuid3 = new Uuid(UUID.nameUUIDFromBytes(
574 (String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC,
575 oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8")))
577 LOG.info("NEP = {} has Uuid {} ", String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC,
578 oorNetworkPortList.get(i).getTpId().getValue()), nepUuid3);
579 this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC,
580 oorNetworkPortList.get(i).getTpId().getValue()), nepUuid3);
581 Name onedName = new NameBuilder()
582 .setValueName("PhotMedNodeEdgePoint")
583 .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC,
584 oorNetworkPortList.get(i).getTpId().getValue()))
587 OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName),
588 LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true,
589 String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC));
590 onepl.put(onep.key(), onep);
592 // create NodeRuleGroup
594 LOG.debug("ODU switching pool = {}", this.oorOduSwitchingPool.nonnullNonBlockingList().values());
595 for (NonBlockingList nbl : this.oorOduSwitchingPool.nonnullNonBlockingList().values()) {
596 Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePointKey,
597 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint>
598 nepList = new HashMap<>();
599 Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePointKey,
600 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint>
601 oduNepList = new HashMap<>();
602 LOG.debug("UUidMap={}", this.uuidMap.keySet());
603 LOG.debug("TP list = {}", nbl.getTpList());
604 for (TpId tp : nbl.getTpList()) {
605 LOG.debug("TP={}", tp.getValue());
606 LOG.debug("UuidKey={}", String.join("+", this.ietfNodeId,
607 TapiStringConstants.E_ODU, tp.getValue()));
608 if (this.uuidMap.containsKey(String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
609 tp.getValue())) || this.uuidMap.containsKey(String.join(
610 "+", this.ietfNodeId, TapiStringConstants.I_ODU, tp.getValue()))) {
611 String qual = tp.getValue().contains("CLIENT") ? TapiStringConstants.DSR
612 : TapiStringConstants.I_ODU;
613 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint
614 nep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121
615 .node.rule.group.NodeEdgePointBuilder()
616 .setTopologyUuid(tapiTopoUuid)
617 .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId,
618 TapiStringConstants.XPDR)))
619 .setNodeEdgePointUuid(this.uuidMap.get(String.join("+", this.ietfNodeId,
620 qual, tp.getValue())))
622 nepList.put(nep.key(), nep);
624 if (this.uuidMap.containsKey(String.join("+", this.ietfNodeId,
625 TapiStringConstants.E_ODU, tp.getValue()))) {
626 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint
627 nep1 = new org.opendaylight.yang.gen.v1.urn
628 .onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePointBuilder()
629 .setTopologyUuid(tapiTopoUuid)
630 .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId,
631 TapiStringConstants.XPDR)))
632 .setNodeEdgePointUuid(this.uuidMap.get(String.join(
633 "+", this.ietfNodeId, TapiStringConstants.E_ODU, tp.getValue())))
635 oduNepList.put(nep1.key(), nep1);
637 if (this.uuidMap.containsKey(String.join("+", this.ietfNodeId,
638 TapiStringConstants.I_ODU, tp.getValue()))) {
639 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint
640 nep2 = new org.opendaylight.yang.gen.v1.urn
641 .onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePointBuilder()
642 .setTopologyUuid(tapiTopoUuid)
643 .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId,
644 TapiStringConstants.XPDR)))
645 .setNodeEdgePointUuid(this.uuidMap.get(String.join(
646 "+", this.ietfNodeId, TapiStringConstants.I_ODU, tp.getValue())))
648 oduNepList.put(nep2.key(), nep2);
651 LOG.debug("NEPLIST (DSR/I_ODU) of [dsr node rule group] is {}", nepList.toString());
652 LOG.debug("NEPLIST (E_ODU/I_ODU) of [odu node rule group] is {}", nepList.toString());
653 // Empty random creation of mandatory fields for avoiding errors....
654 CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
655 .setCostAlgorithm("Restricted Shortest Path - RSP")
656 .setCostName("HOP_COUNT")
657 .setCostValue(TapiStringConstants.COST_HOP_VALUE)
659 LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
660 .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE)
661 .setQueuingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE)
662 .setJitterCharacteristic(TapiStringConstants.JITTER_VALUE)
663 .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE)
664 .setTrafficPropertyName("FIXED_LATENCY")
666 RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder()
667 .setRiskCharacteristicName("risk characteristic")
668 .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2"))
670 NodeRuleGroup nodeRuleGroup1 = new NodeRuleGroupBuilder()
671 .setUuid(new Uuid(UUID.nameUUIDFromBytes(("dsr node rule group " + count)
672 .getBytes(Charset.forName("UTF-8"))).toString()))
674 .setNodeEdgePoint(nepList)
675 .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic))
676 .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
677 .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
679 nodeRuleGroupList.put(nodeRuleGroup1.key(), nodeRuleGroup1);
680 NodeRuleGroup nodeRuleGroup2 = new NodeRuleGroupBuilder()
681 .setUuid(new Uuid(UUID.nameUUIDFromBytes(("odu node rule group " + count)
682 .getBytes(Charset.forName("UTF-8"))).toString()))
684 .setNodeEdgePoint(oduNepList)
685 .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic))
686 .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
687 .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
689 nodeRuleGroupList.put(nodeRuleGroup2.key(), nodeRuleGroup2);
695 private OwnedNodeEdgePoint createNep(TerminationPoint oorTp, Map<NameKey, Name> nepNames,
696 LayerProtocolName nepProtocol, LayerProtocolName nodeProtocol, boolean withSip, String keyword) {
697 String key = String.join("+", keyword, oorTp.getTpId().getValue());
698 AdministrativeState adminState = (oorTp.augmentation(TerminationPoint1.class).getAdministrativeState() != null)
699 ? transformAsToTapiAdminState(oorTp.augmentation(TerminationPoint1.class).getAdministrativeState()
702 OperationalState operState = (oorTp.augmentation(TerminationPoint1.class).getOperationalState() != null)
703 ? transformOsToTapiOperationalState(oorTp.augmentation(TerminationPoint1.class).getOperationalState()
706 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.TerminationPoint1 tp1 =
707 oorTp.augmentation(org.opendaylight.yang.gen.v1.http
708 .org.openroadm.otn.network.topology.rev230526.TerminationPoint1.class);
709 if (tp1.getTpSupportedInterfaces() == null) {
710 LOG.warn("Tp supported interface doesnt exist on TP {}", oorTp.getTpId().getValue());
713 // Collection<SupportedInterfaceCapability> sicList = tp1.getTpSupportedInterfaces()
714 Collection<SupportedInterfaceCapability> sicColl = tp1.getTpSupportedInterfaces()
715 .getSupportedInterfaceCapability().values();
716 OwnedNodeEdgePointBuilder onepBldr = new OwnedNodeEdgePointBuilder()
717 .setUuid(this.uuidMap.get(key))
718 .setLayerProtocolName(nepProtocol)
720 onepBldr.setSupportedCepLayerProtocolQualifierInstances(createSupportedCepLayerProtocolQualifier(sicColl,
722 .setDirection(Direction.BIDIRECTIONAL)
723 .setLinkPortRole(PortRole.SYMMETRIC)
724 .setAdministrativeState(adminState)
725 .setOperationalState(operState)
726 .setLifecycleState(LifecycleState.INSTALLED);
728 onepBldr.setMappedServiceInterfacePoint(
729 createMSIP(1, nepProtocol, oorTp.getTpId().getValue(), keyword, sicColl, operState, adminState));
731 return onepBldr.build();
734 private ServiceInterfacePoint createSIP(Uuid sipUuid, LayerProtocolName layerProtocol, String tpId,
735 String nodeid, Collection<SupportedInterfaceCapability> supportedInterfaceCapability,
736 OperationalState operState, AdministrativeState adminState) {
737 // TODO: what value should be set in total capacity and available capacity??
738 // LOG.info("SIP name = {}", String.join("+", nodeid, tp.getTpId().getValue()));
739 Name sipName = new NameBuilder()
740 .setValueName("SIP name")
741 .setValue(String.join("+", nodeid, tpId))
744 return new ServiceInterfacePointBuilder()
746 .setName(Map.of(sipName.key(), sipName))
747 .setLayerProtocolName(layerProtocol)
748 .setAdministrativeState(adminState)
749 .setOperationalState(operState)
750 .setLifecycleState(LifecycleState.INSTALLED)
751 .setAvailableCapacity(new AvailableCapacityBuilder().build())
752 .setTotalPotentialCapacity(new TotalPotentialCapacityBuilder().build())
753 .setSupportedCepLayerProtocolQualifierInstances(createSipSupportedLayerProtocolQualifier(
754 supportedInterfaceCapability, layerProtocol))
758 private List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
759 .service._interface.point.SupportedCepLayerProtocolQualifierInstances>
760 createSipSupportedLayerProtocolQualifier(
761 Collection<SupportedInterfaceCapability> supportedInterfaceCapability,
762 LayerProtocolName lpn) {
763 List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
764 .service._interface.point.SupportedCepLayerProtocolQualifierInstances> sclpqiList = new ArrayList<>();
765 if (supportedInterfaceCapability == null) {
766 sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
767 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
768 .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
769 .setNumberOfCepInstances(Uint64.valueOf(1))
773 for (SupportedInterfaceCapability sic : supportedInterfaceCapability) {
774 String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
775 switch (lpn.getName()) {
779 // TODO: it may be needed to add more cases clauses if the interface capabilities of a
780 // port are extended in the config file
782 sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
783 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
784 .setLayerProtocolQualifier(ODUTYPEODU0.VALUE)
785 .setNumberOfCepInstances(Uint64.valueOf(0))
787 sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
788 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
789 .setLayerProtocolQualifier(DIGITALSIGNALTYPEGigE.VALUE)
790 .setNumberOfCepInstances(Uint64.valueOf(0))
794 sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
795 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
796 .setLayerProtocolQualifier(ODUTYPEODU2E.VALUE)
797 .setNumberOfCepInstances(Uint64.valueOf(0))
799 sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
800 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
801 .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE)
802 .setNumberOfCepInstances(Uint64.valueOf(0))
806 sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
807 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
808 .setLayerProtocolQualifier(ODUTYPEODU2.VALUE)
809 .setNumberOfCepInstances(Uint64.valueOf(0))
811 sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
812 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
813 .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE)
814 .setNumberOfCepInstances(Uint64.valueOf(0))
818 sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
819 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
820 .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE)
821 .setNumberOfCepInstances(Uint64.valueOf(0))
825 sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
826 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
827 .setLayerProtocolQualifier(DIGITALSIGNALTYPE100GigE.VALUE)
828 .setNumberOfCepInstances(Uint64.valueOf(0))
830 sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
831 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
832 .setLayerProtocolQualifier(ODUTYPEODU4.VALUE)
833 .setNumberOfCepInstances(Uint64.valueOf(0))
837 sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
838 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
839 .setLayerProtocolQualifier(DIGITALSIGNALTYPE100GigE.VALUE)
840 .setNumberOfCepInstances(Uint64.valueOf(0))
843 case "IfOCHOTU4ODU4":
845 sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
846 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
847 .setLayerProtocolQualifier(ODUTYPEODU4.VALUE)
848 .setNumberOfCepInstances(Uint64.valueOf(0))
852 LOG.error("IfCapability type not managed");
858 // TODO: it may be needed to add more cases clauses if the interface capabilities of a
859 // port are extended in the config file
861 sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
862 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
863 .setLayerProtocolQualifier(ODUTYPEODU0.VALUE)
864 .setNumberOfCepInstances(Uint64.valueOf(0))
868 sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
869 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
870 .setLayerProtocolQualifier(ODUTYPEODU2E.VALUE)
871 .setNumberOfCepInstances(Uint64.valueOf(0))
876 sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
877 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
878 .setLayerProtocolQualifier(ODUTYPEODU2.VALUE)
879 .setNumberOfCepInstances(Uint64.valueOf(0))
884 case "IfOCHOTU4ODU4":
886 sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
887 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
888 .setLayerProtocolQualifier(ODUTYPEODU4.VALUE)
889 .setNumberOfCepInstances(Uint64.valueOf(0))
893 LOG.error("IfCapability type not managed");
897 case "PHOTONIC_MEDIA":
898 if (ifCapType.equals("IfOCHOTU4ODU4") || ifCapType.equals("IfOCH")) {
899 sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
900 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
901 .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE)
902 .setNumberOfCepInstances(Uint64.valueOf(0))
904 sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
905 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
906 .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
907 .setNumberOfCepInstances(Uint64.valueOf(0))
912 LOG.error("Layer Protocol Name is unknown");
916 return sclpqiList.stream().distinct().toList();
919 public Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node>
924 public Map<LinkKey, Link> getTapiLinks() {
928 public AdministrativeState transformAsToTapiAdminState(String adminState) {
929 if (adminState == null) {
932 return adminState.equals(AdminStates.InService.getName())
933 || adminState.equals(AdministrativeState.UNLOCKED.getName()) ? AdministrativeState.UNLOCKED
934 : AdministrativeState.LOCKED;
937 public OperationalState transformOsToTapiOperationalState(String operState) {
938 if (operState == null) {
941 return operState.equals("inService") || operState.equals(OperationalState.ENABLED.getName())
942 ? OperationalState.ENABLED : OperationalState.DISABLED;
945 public Map<ServiceInterfacePointKey, ServiceInterfacePoint> getTapiSips() {
949 public void setTapiSips(Map<ServiceInterfacePointKey, ServiceInterfacePoint> tapiSip) {
950 this.tapiSips.putAll(tapiSip);