2 * Copyright (c) 2018 Pantheon Technologies s.r.o. 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 https://www.eclipse.org/legal/epl-v10.html
8 package io.lighty.controllers.tpce.module;
10 import io.lighty.core.controller.api.AbstractLightyModule;
11 import io.lighty.core.controller.api.LightyServices;
12 import java.util.Arrays;
13 import java.util.List;
14 import org.opendaylight.mdsal.binding.api.NotificationService;
15 import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
16 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl;
17 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl121;
18 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl221;
19 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl710;
20 import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl;
21 import org.opendaylight.transportpce.common.mapping.MappingUtils;
22 import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl;
23 import org.opendaylight.transportpce.common.mapping.PortMapping;
24 import org.opendaylight.transportpce.common.mapping.PortMappingImpl;
25 import org.opendaylight.transportpce.common.mapping.PortMappingVersion121;
26 import org.opendaylight.transportpce.common.mapping.PortMappingVersion221;
27 import org.opendaylight.transportpce.common.mapping.PortMappingVersion710;
28 import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
29 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
30 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
31 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl;
32 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl121;
33 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl221;
34 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl710;
35 import org.opendaylight.transportpce.nbinotifications.impl.NbiNotificationsProvider;
36 import org.opendaylight.transportpce.networkmodel.NetConfTopologyListener;
37 import org.opendaylight.transportpce.networkmodel.NetworkModelProvider;
38 import org.opendaylight.transportpce.networkmodel.NetworkUtilsImpl;
39 import org.opendaylight.transportpce.networkmodel.R2RLinkDiscovery;
40 import org.opendaylight.transportpce.networkmodel.listeners.PortMappingListener;
41 import org.opendaylight.transportpce.networkmodel.service.FrequenciesService;
42 import org.opendaylight.transportpce.networkmodel.service.FrequenciesServiceImpl;
43 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
44 import org.opendaylight.transportpce.networkmodel.service.NetworkModelServiceImpl;
45 import org.opendaylight.transportpce.olm.OlmPowerServiceRpcImpl;
46 import org.opendaylight.transportpce.olm.OlmProvider;
47 import org.opendaylight.transportpce.olm.power.PowerMgmt;
48 import org.opendaylight.transportpce.olm.power.PowerMgmtImpl;
49 import org.opendaylight.transportpce.olm.service.OlmPowerService;
50 import org.opendaylight.transportpce.olm.service.OlmPowerServiceImpl;
51 import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumer;
52 import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumerImpl;
53 import org.opendaylight.transportpce.pce.impl.PceProvider;
54 import org.opendaylight.transportpce.pce.service.PathComputationService;
55 import org.opendaylight.transportpce.pce.service.PathComputationServiceImpl;
56 import org.opendaylight.transportpce.renderer.RendererProvider;
57 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface121;
58 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface221;
59 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface710;
60 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory;
61 // Adding OTN interface
62 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmOtnInterface221;
63 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmOtnInterface710;
64 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
65 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererServiceImpl;
66 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
68 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererServiceImpl;
69 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
70 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperationsImpl;
71 import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
72 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
73 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerProvider;
74 import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
75 import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
76 import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
77 import org.opendaylight.transportpce.servicehandler.listeners.ServiceListener;
78 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
79 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
80 import org.opendaylight.transportpce.tapi.R2RTapiLinkDiscovery;
81 import org.opendaylight.transportpce.tapi.impl.TapiProvider;
82 import org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelListenerImpl;
83 import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
84 import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
85 import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
86 import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
87 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
88 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelServiceImpl;
89 import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl;
90 import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener;
91 import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
92 import org.opendaylight.transportpce.tapi.utils.TapiLink;
93 import org.opendaylight.transportpce.tapi.utils.TapiListener;
94 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
95 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
96 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
97 import org.slf4j.Logger;
98 import org.slf4j.LoggerFactory;
101 public class TransportPCEImpl extends AbstractLightyModule implements TransportPCE {
102 private static final Logger LOG = LoggerFactory.getLogger(TransportPCEImpl.class);
103 private static final long MAX_DURATION_TO_SUBMIT_TRANSACTION = 1500;
105 // cannot use interface for DeviceTransactionManagerImpl
106 // because implementation has additional public methods ...
107 private final DeviceTransactionManagerImpl deviceTransactionManager;
108 private final NetworkTransactionService networkTransaction;
110 private final PceProvider pceProvider;
111 // network model beans
112 private final NetworkModelProvider networkModelProvider;
114 private final OlmProvider olmProvider;
116 private final RendererProvider rendererProvider;
117 // service-handler beans
118 private final ServicehandlerProvider servicehandlerProvider;
120 private TapiProvider tapiProvider;
121 // nbi-notifications beans
122 private NbiNotificationsProvider nbiNotificationsProvider;
124 * List of publisher topics.
126 private final List<String> publisherServiceList = Arrays.asList("PceListener", "ServiceHandlerOperations",
127 "ServiceHandler", "RendererListener");
128 private final List<String> publisherAlarmList = Arrays.asList("ServiceListener");
130 public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification, boolean activateTapi,
131 String olmtimer1, String olmtimer2) {
132 LOG.info("Initializing transaction providers ...");
133 deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(),
134 MAX_DURATION_TO_SUBMIT_TRANSACTION);
135 networkTransaction = new NetworkTransactionImpl(lightyServices.getBindingDataBroker());
137 LOG.info("Creating network-model beans ...");
138 R2RLinkDiscovery linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getBindingDataBroker(),
139 deviceTransactionManager, networkTransaction);
140 PortMapping portMapping = initPortMapping(lightyServices);
141 NetworkModelService networkModelService = new NetworkModelServiceImpl(lightyServices.getBindingDataBroker(),
142 deviceTransactionManager, networkTransaction, portMapping,
143 lightyServices.getBindingNotificationPublishService());
144 FrequenciesService networkModelWavelengthService = new FrequenciesServiceImpl(
145 lightyServices.getBindingDataBroker());
146 new NetConfTopologyListener(networkModelService,
147 lightyServices.getBindingDataBroker(), deviceTransactionManager, portMapping);
148 new PortMappingListener(networkModelService);
149 networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getBindingDataBroker(),
150 lightyServices.getRpcProviderService(), networkModelService, deviceTransactionManager, portMapping,
151 lightyServices.getNotificationService(), networkModelWavelengthService);
153 LOG.info("Creating PCE beans ...");
154 // TODO: pass those parameters through command line
155 GnpyConsumer gnpyConsumer = new GnpyConsumerImpl("http://127.0.0.1:8008",
156 "gnpy", "gnpy", lightyServices.getAdapterContext().currentSerializer());
157 PathComputationService pathComputationService = new PathComputationServiceImpl(
159 lightyServices.getBindingNotificationPublishService(),
163 pceProvider = new PceProvider(lightyServices.getRpcProviderService(), pathComputationService);
165 LOG.info("Creating OLM beans ...");
166 MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
167 CrossConnect crossConnect = initCrossConnect(mappingUtils);
168 OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils, portMapping);
169 PowerMgmt powerMgmt = new PowerMgmtImpl(lightyServices.getBindingDataBroker(), openRoadmInterfaces,
170 crossConnect, deviceTransactionManager, portMapping, olmtimer1, olmtimer2);
171 OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
172 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
173 TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
174 olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerServiceRpc);
176 LOG.info("Creating renderer beans ...");
177 OpenRoadmInterfaceFactory openRoadmInterfaceFactory = initOpenRoadmFactory(mappingUtils, openRoadmInterfaces,
179 DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
180 lightyServices.getBindingDataBroker(), deviceTransactionManager, openRoadmInterfaceFactory,
181 openRoadmInterfaces, crossConnect, portMapping);
182 OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(openRoadmInterfaceFactory,
183 crossConnect, openRoadmInterfaces, deviceTransactionManager, networkModelService);
184 rendererProvider = initRenderer(lightyServices, olmPowerServiceRpc, deviceRendererService,
185 otnDeviceRendererService, portMapping);
187 LOG.info("Creating service-handler beans ...");
188 RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService,
189 otnDeviceRendererService, olmPowerServiceRpc, lightyServices.getBindingDataBroker(),
190 lightyServices.getBindingNotificationPublishService(), portMapping);
191 ServiceDataStoreOperations serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(
192 lightyServices.getBindingDataBroker());
193 RendererListenerImpl rendererListenerImpl = new RendererListenerImpl(pathComputationService,
194 lightyServices.getBindingNotificationPublishService(), networkModelService);
195 PceListenerImpl pceListenerImpl = new PceListenerImpl(rendererServiceOperations, pathComputationService,
196 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
197 NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
198 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
199 ServicehandlerImpl servicehandler = new ServicehandlerImpl(lightyServices.getBindingDataBroker(),
200 pathComputationService, rendererServiceOperations, lightyServices.getBindingNotificationPublishService(),
201 pceListenerImpl, rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations);
202 ServiceListener serviceListener = new ServiceListener(servicehandler, serviceDataStoreOperations,
203 lightyServices.getBindingNotificationPublishService());
204 servicehandlerProvider = new ServicehandlerProvider(lightyServices.getBindingDataBroker(),
205 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
206 serviceDataStoreOperations, pceListenerImpl, serviceListener, rendererListenerImpl,
207 networkModelListenerImpl, servicehandler);
209 LOG.info("Creating tapi beans ...");
210 TapiLink tapiLink = new TapiLink(networkTransaction);
211 R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction,
212 deviceTransactionManager, tapiLink);
213 TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
214 .getBindingDataBroker(), lightyServices.getBindingNotificationPublishService());
215 TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
216 TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(
217 lightyServices.getBindingDataBroker());
218 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
219 networkTransaction, tapiLink);
220 TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
221 tapilinkDiscoveryImpl, networkTransaction, tapiLink,
222 lightyServices.getBindingNotificationPublishService());
223 TapiNetconfTopologyListener tapiNetConfTopologyListener =
224 new TapiNetconfTopologyListener(tapiNetworkModelService);
225 TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
226 TapiPortMappingListener tapiPortMappingListener =
227 new TapiPortMappingListener(tapiNetworkModelService);
228 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl =
229 new TapiNetworkModelListenerImpl(networkTransaction,
230 lightyServices.getBindingNotificationPublishService());
232 tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
233 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl,
234 tapiPceListenerImpl, tapiRendererListenerImpl, tapiServiceHandlerListener,
235 lightyServices.getNotificationService(), orLinkListener, tapiNetworkModelListenerImpl);
237 if (activateNbiNotification) {
238 LOG.info("Creating nbi-notifications beans ...");
239 nbiNotificationsProvider = new NbiNotificationsProvider(
240 publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
241 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer(),
247 protected boolean initProcedure() {
248 LOG.info("Initializing PCE provider ...");
250 LOG.info("Initializing OLM provider ...");
252 LOG.info("Initializing renderer provider ...");
253 rendererProvider.init();
254 LOG.info("Initializing service-handler provider ...");
255 servicehandlerProvider.init();
256 if (tapiProvider != null) {
257 LOG.info("Initializing tapi provider ...");
260 if (nbiNotificationsProvider != null) {
261 LOG.info("Initializing nbi-notifications provider ...");
262 nbiNotificationsProvider.init();
264 LOG.info("Init done.");
269 protected boolean stopProcedure() {
270 if (nbiNotificationsProvider != null) {
271 nbiNotificationsProvider.close();
272 LOG.info("Shutting down nbi-notifications provider ...");
274 if (tapiProvider != null) {
275 tapiProvider.close();
276 LOG.info("Shutting down service-handler provider ...");
278 servicehandlerProvider.close();
279 LOG.info("Shutting down renderer provider ...");
280 rendererProvider.close();
281 LOG.info("Shutting down OLM provider ...");
283 LOG.info("Shutting down network-model provider ...");
284 networkModelProvider.close();
285 LOG.info("Shutting down PCE provider ...");
287 LOG.info("Shutting down transaction providers ...");
288 deviceTransactionManager.preDestroy();
289 LOG.info("Shutdown done.");
293 private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
294 NetworkTransactionService networkTransactionService,
295 ServiceDataStoreOperations serviceDataStoreOperations,
296 TapiNetconfTopologyListener tapiNetConfTopologyListener,
297 TapiPortMappingListener tapiPortMappingListener,
298 TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
299 TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
300 TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
301 NotificationService notificationService, TapiOrLinkListener orLinkListener,
302 TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl) {
303 return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
304 servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
305 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
306 rendererListenerImpl, serviceHandlerListenerImpl, notificationService, orLinkListener,
307 tapiNetworkModelListenerImpl);
310 private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
311 DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
312 PortMapping portMapping) {
313 DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
314 otnDeviceRendererService);
315 RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
316 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
317 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
319 return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererRPC,
320 rendererServiceOperations);
323 private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
324 OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
325 OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces);
326 OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces);
327 OpenRoadmInterface710 openRoadmInterface710 = new OpenRoadmInterface710(portMapping, openRoadmInterfaces);
328 OpenRoadmOtnInterface221 openRoadmOtnInterface221 = new OpenRoadmOtnInterface221(portMapping,
329 openRoadmInterfaces);
330 OpenRoadmOtnInterface710 openRoadmOtnInterface710 = new OpenRoadmOtnInterface710(portMapping,
331 openRoadmInterfaces);
332 return new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface221,
333 openRoadmInterface710, openRoadmOtnInterface221, openRoadmOtnInterface710);
336 private PortMapping initPortMapping(LightyServices lightyServices) {
337 PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
338 deviceTransactionManager);
339 PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
340 deviceTransactionManager);
341 PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
342 deviceTransactionManager);
343 return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
344 portMappingVersion221, portMappingVersion121);
347 private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils, PortMapping portMapping) {
348 OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
349 deviceTransactionManager);
350 OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
351 deviceTransactionManager, portMapping);
352 OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
353 deviceTransactionManager, portMapping);
354 return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
355 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
358 private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
359 CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
360 CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
361 CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
362 return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
363 crossConnectImpl710);